我们有一个使用 Telerik AppBuilder 开发的跨平台 cordova 应用程序,以及一个使用 Xamarin Studio 构建的 WatchKit 应用程序(扩展 + watchkit 应用程序)。我不知道将已编译的扩展(.appex,对吗?)和 Telerik AppBuilder 输出的 IPA 捆绑在一起的正确步骤是什么。
考虑到我们使用的技术范围很广,我什至不知道应该从哪里开始寻找这个过程。我注意到我可以像大多数其他 ZIP 存档一样访问 IPA 内容,但不知道这是否是正确的第一步...
最佳答案
可以通过编辑 .ipa
来实现。主 Cordova 应用程序的文件。一般来说,应该添加 .appex
Plugins
下的文件文件夹,创建.entitlements
主机 iPhone/iPad 应用程序的文件,最后重新编码二进制文件并压缩 Payload
到.ipa
再次归档。以下是描述如何将使用 Telerik AppBuilder 开发的 Cordova 应用程序与 WatchKit 应用程序(扩展 + watchkit 应用程序)相结合的步骤。
- 首先你需要有
.ipa
主机应用程序的文件和.appex
WatchKit 应用程序包。一个.ipa
文件是一个常规的 iOS 应用程序存档文件,可以像任何其他存档一样解压缩。例如,您可以使用unzip
命令行工具(例如unzip <my_ipa_file>.ipa
)。解压 Telerik AppBuilder.ipa
和 WatchKit 应用程序。
注意: 每个.ipa
存档包含名为Payload
的文件夹实际.app
在哪里应用程序包位于。压缩此文件夹时应保持这一命名约定。 - 删除
_CodeSignature
文件夹位于Payload/<cordova_application_name>.app/_CodeSignature
._CodeSignature
文件夹包含 xml 文件,该文件表示在应用程序二进制代码设计过程中创建的哈希表。它主要包含有关应用程序资源的信息。我们不需要这个,因为我们的目标是生成新的。 - 复制
.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>
添加 archived-expanded-entitlements.xcent
在 Payload/<cordova_application_name>.app/archived-expanded-entitlements.xcent
下
注意:Main_Application_Bundle_Identifier
是CFBundleIdentifier
你的 Cordova 应用程序的值(value)。有关 App_Identifier_Prefix
的更多信息检查这个 SO 问题 Changing manually $(AppIdentifierPrefix) property?
- 所有
.mobileprovision
文件应使用正确的应用程序 ID 和相同的证书。我建议最初使用.ipa
cordova 应用程序的文件使用正确的.mobileprovision
签名条款。否则你应该把你的.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/
) - 我们准备好了!
如果您在这个问题上需要任何进一步的帮助,请告诉我。
关于ios - 如何在 Cordova App 中打包 Watch App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32686529/