如何在 Cordova App 中打包 Watch App
How to Package Watch App within Cordova App
我们有一个使用 Telerik AppBuilder 开发的跨平台 cordova 应用程序,以及一个使用 Xamarin Studio 构建的 WatchKit 应用程序(扩展 + watchkit 应用程序)。我不知道捆绑编译扩展(.appex,对吗?)和 Telerik AppBuilder 输出的 IPA 的正确步骤是什么。
考虑到我们使用的技术范围很广,我什至不知道应该从哪里开始寻找这个过程。我注意到我可以像大多数其他 ZIP 存档一样访问 IPA 内容,但不知道这是否是正确的第一步...
可以通过编辑主 Cordova 应用程序的 .ipa
文件来实现。一般来说,应该在 Plugins
文件夹下添加 .appex
文件,为主机 iPhone/iPad 应用程序创建 .entitlements
文件,最后重新编码二进制文件并压缩 Payload
到 .ipa
文件。以下是描述如何将使用 Telerik AppBuilder 开发的 Cordova 应用程序与 WatchKit 应用程序(扩展 + watchkit 应用程序)结合起来的步骤。
- 首先,您需要为您的主机应用程序提供
.ipa
文件,并为 WatchKit 应用程序提供 .appex
包。 .ipa
文件是一个常规的 iOS 应用程序存档文件,可以像任何其他存档一样解压缩。例如,您可以使用 unzip
命令行工具(例如 unzip <my_ipa_file>.ipa
)。解压 Telerik AppBuilder .ipa
和 WatchKit 应用程序。
注意: 每个 .ipa
存档包含名为 Payload
的文件夹,其中实际 .app
应用程序包所在。压缩此文件夹时应保持这一命名约定。
- 删除位于
Payload/<cordova_application_name>.app/_CodeSignature
的 _CodeSignature
文件夹。 _CodeSignature
文件夹包含 xml 文件,该文件表示在应用程序二进制代码签名过程中创建的散列 table。它主要包含有关应用程序资源的信息。我们不需要这个,因为我们的目标是生成新的。
- 将
.appex
WatchKit 扩展复制到 Payload/cordova_application_name>.app/Plugins
(您很可能需要创建 Plugins
文件夹)。
使用模板
创建 archived-expanded-entitlements.xcent
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>'App_Identifier_Prefix'.'Main_Application_Bundle_Identifier'</string>
<key>keychain-access-groups</key>
<array>
<string>'App_Identifier_Prefix'.'Main_Application_Bundle_Identifier'</string>
</array>
</dict>
</plist>
在Payload/<cordova_application_name>.app/archived-expanded-entitlements.xcent
下添加archived-expanded-entitlements.xcent
注意: Main_Application_Bundle_Identifier
是您的 cordova 应用程序的 CFBundleIdentifier
值。有关 App_Identifier_Prefix
的更多信息,请查看此 SO 问题 Changing manually $(AppIdentifierPrefix) property?
- 所有
.mobileprovision
文件应使用正确的应用程序 ID 和相同的证书。我建议最初使用正确的 .mobileprovision
条款对 cordova 应用程序的 .ipa
文件进行签名。否则你应该把你的 .mobileprovision
放在 Payload/<cordova_application_name>.app/embedded.mobileprovision
. 下
- 使用
codesign
工具重新签署Cordova 应用程序的二进制文件。
codesign -f -s "Certificate_Name" --entitlements Payload/<cordova_application_name>.app/archived-expanded-entitlements.xcent Payload/<cordova_application_name>.app/<cordova_application_name>
- 将编辑后的
Payload
压缩回 .ipa
文件。 (例如 zip -r <expected_ipa_name>.ipa Payload/
)
- 我们准备好了!
如果您需要有关此问题的任何进一步帮助,请告诉我。
我们有一个使用 Telerik AppBuilder 开发的跨平台 cordova 应用程序,以及一个使用 Xamarin Studio 构建的 WatchKit 应用程序(扩展 + watchkit 应用程序)。我不知道捆绑编译扩展(.appex,对吗?)和 Telerik AppBuilder 输出的 IPA 的正确步骤是什么。
考虑到我们使用的技术范围很广,我什至不知道应该从哪里开始寻找这个过程。我注意到我可以像大多数其他 ZIP 存档一样访问 IPA 内容,但不知道这是否是正确的第一步...
可以通过编辑主 Cordova 应用程序的 .ipa
文件来实现。一般来说,应该在 Plugins
文件夹下添加 .appex
文件,为主机 iPhone/iPad 应用程序创建 .entitlements
文件,最后重新编码二进制文件并压缩 Payload
到 .ipa
文件。以下是描述如何将使用 Telerik AppBuilder 开发的 Cordova 应用程序与 WatchKit 应用程序(扩展 + watchkit 应用程序)结合起来的步骤。
- 首先,您需要为您的主机应用程序提供
.ipa
文件,并为 WatchKit 应用程序提供.appex
包。.ipa
文件是一个常规的 iOS 应用程序存档文件,可以像任何其他存档一样解压缩。例如,您可以使用unzip
命令行工具(例如unzip <my_ipa_file>.ipa
)。解压 Telerik AppBuilder.ipa
和 WatchKit 应用程序。
注意: 每个.ipa
存档包含名为Payload
的文件夹,其中实际.app
应用程序包所在。压缩此文件夹时应保持这一命名约定。 - 删除位于
Payload/<cordova_application_name>.app/_CodeSignature
的_CodeSignature
文件夹。_CodeSignature
文件夹包含 xml 文件,该文件表示在应用程序二进制代码签名过程中创建的散列 table。它主要包含有关应用程序资源的信息。我们不需要这个,因为我们的目标是生成新的。 - 将
.appex
WatchKit 扩展复制到Payload/cordova_application_name>.app/Plugins
(您很可能需要创建Plugins
文件夹)。 使用模板
创建archived-expanded-entitlements.xcent
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>application-identifier</key> <string>'App_Identifier_Prefix'.'Main_Application_Bundle_Identifier'</string> <key>keychain-access-groups</key> <array> <string>'App_Identifier_Prefix'.'Main_Application_Bundle_Identifier'</string> </array> </dict> </plist>
在Payload/<cordova_application_name>.app/archived-expanded-entitlements.xcent
下添加archived-expanded-entitlements.xcent
注意: Main_Application_Bundle_Identifier
是您的 cordova 应用程序的 CFBundleIdentifier
值。有关 App_Identifier_Prefix
的更多信息,请查看此 SO 问题 Changing manually $(AppIdentifierPrefix) property?
- 所有
.mobileprovision
文件应使用正确的应用程序 ID 和相同的证书。我建议最初使用正确的.mobileprovision
条款对 cordova 应用程序的.ipa
文件进行签名。否则你应该把你的.mobileprovision
放在Payload/<cordova_application_name>.app/embedded.mobileprovision
. 下
- 使用
codesign
工具重新签署Cordova 应用程序的二进制文件。codesign -f -s "Certificate_Name" --entitlements Payload/<cordova_application_name>.app/archived-expanded-entitlements.xcent Payload/<cordova_application_name>.app/<cordova_application_name>
- 将编辑后的
Payload
压缩回.ipa
文件。 (例如zip -r <expected_ipa_name>.ipa Payload/
) - 我们准备好了!
如果您需要有关此问题的任何进一步帮助,请告诉我。