到目前为止,我编译PhoneGap应用程序的所有经验都来自优秀的PhoneGap:Build服务.但是,我现在发现自己处于需要本地编译的情况,因为我需要使用包含二进制文件的插件,这样就不能将其包含在PG中使用:B.
因此,出于这些原因,我需要在本地编译."大!" 我想,我只会使用新的CLI ......
我已经开发了我的应用程序,我可以通过从Xcode上通过USB部署在设备上进行测试,但尝试获取发布版本并使用嵌入的配置文件签名,这一直是一场噩梦.
为了完整性,除了应用程序开发本身之外,这是我所做的一切的基本概要.
$ pwd /users/adam/dev/myapp/mobile/ $ cordova create build_local com.foo.bar MyApp Creating a new cordova project with name "MyApp" and id "com.foo.bar" at location "/Users/adam/DEV/myapp/build_local" $ cd build_local $ cordova platform add ios Creating ios project... $ cordova platform add android Creating android project... Creating Cordova project for the Android platform: Path: platforms/android Package: com.foo.bar Name: MyApp Android target: android-19 Copying template files...Project successfully created. $ cordova plugin add https://github.com/hazemhagrass/BackgroundJS Fetching plugin "https://github.com/hazemhagrass/BackgroundJS" via git clone Installing com.badrit.BackgroundJS (android) Fetching plugin "https://github.com/apache/cordova-plugin-device.git" via git clone Installing org.apache.cordova.device (android) Installing com.badrit.BackgroundJS (ios) Installing org.apache.cordova.device (ios) $ cordova plugin add de.appplant.cordova.plugin.local-notification Fetching plugin "de.appplant.cordova.plugin.local-notification" via plugin registry Installing de.appplant.cordova.plugin.local-notification (android) Installing de.appplant.cordova.plugin.local-notification (ios) $ cordova plugin add https://github.com/kdzwinel/phonegap-estimotebeacons Fetching plugin "https://github.com/kdzwinel/phonegap-estimotebeacons" via git clone Installing pl.makingwaves.estimotebeacons (android) Installing pl.makingwaves.estimotebeacons (ios)
对于它的价值,最后一个插件是我必须在本地编译的原因.
现在,这是另一个潜在的猴子扳手:这个应用程序实际上是两个应用程序.它是相同的核心代码库,合并到repo的两个不同的部署分支中,每个客户端一个.所以每个应用程序都有自己的id,名称和配置.因此,我实际上有多个cordova项目文件夹(每个最终应用程序1个),并且在通过上述步骤创建每个项目之后,我删除生成的www
文件夹并将其替换为符号链接到存在于外部的共享www文件夹.这些phonegap项目目录.
这是受支持的行为; CLI允许您通过--link-to
标志生成带有符号链接的应用程序(cordova help create
有关详细信息,请参阅参考资料).但是,这样做似乎有问题 ; 所以我已经准备好先做所有的应用程序配置,然后www
在一切准备好编译之后用符号链接替换生成的文件夹.
此时,我可以部署到iOS模拟器或Android模拟器,我可以通过USB部署到设备,一切正常; 我的所有插件都可用,并按预期运行.所以我准备编译一个发布版本.Android很简单.iOS,不是那么多.
$ cordova build ios** BUILD SUCCEEDED **
但是,这是DEV构建.生成的文件位于build/emulator/
文件夹中,当我尝试签名时,我被告知它没有签名,因为I386架构(这表明它是一个开发版本).
$ xcrun -sdk iphoneos PackageApplication -v "platforms/ios/build/emulator/MyApp.app" -o "/users/adam/dev/myapp/MyApp.ipa" --sign "iPhone Distribution: {our cert name} ({our cert id})"Codesign check fails : platforms/ios/build/emulator/MyApp.app: code object is not signed at all In architecture: i386
我试图从cordova CLI生成发布版本.我无法在--release
任何地方找到记录的标志,但CLI不会抱怨,如果它不识别标志,通常会这样做.
$ cordova build ios --release
尝试对此构建进行签名会导致同样的问题.
此时,我开始尝试直接在Xcode中工作.据.mobileprovision
我所知,我已经适当地设置了文件和签名凭据:
设置这些值后,Xcode不再允许我构建:
所以我陷入了困境:我别无选择,只能在本地构建,我无法弄清楚如何构建它以进行发布和签名!请帮忙!
此外,如果我尝试嵌入配置文件,由于权利问题而失败.我不确定这意味着什么,但我希望它是使用dev构建的结果,并且解决它也将解决这个问题.
$ test -e ~/.ios/DEV.mobileprovision && echo exists exists $ xcrun -sdk iphoneos PackageApplication -v "platforms/ios/build/emulator/MyApp.app" -o "/users/adam/dev/myapp/MyApp.ipa" --embed "~/.ios/DEV.mobileprovision"error: Failed to read entitlements from '/var/folders/zs/j2hmt69n12sbjm6gyn0m_q4c0000gn/T/tyYvYPQKf3/Payload/MyApp.app'
这个问题在一个方面有所帮助.我不知道主动方案(我不确定这意味着什么,但是当我将鼠标悬停在控件上时这是工具提示)在指定键/等时被改变了,但显然它确实如此.将此更改回iOS设备,如iPhone,允许我构建我的项目,甚至存档(据我所知,这意味着它正在创建我需要提交到应用程序商店的.ipa文件),但我找不到存档文件.应该在哪里?我可以在Xcode中的某个设置中定义它吗?
通过摆弄证书和配置文件,我终于能够从Xcode创建一个存档,我被告知这是一个发布版本(是吗?).理想情况下,我希望能够从命令行构建,以便我可以尽可能地自动化它,这样我就可以在早上接收它.在这方面的任何建议都会非常受欢迎!
如果您设法在Xcode中创建存档,那么Xcode就知道您的签名证书和配置文件,因此Cordova构建ios --release --device应该可以实现.
步骤是:
1)通过在Finder中下载并双击它来获取生产的iOS开发人员证书到钥匙串(或通过Xcode获取)
2)下载您的配置文件(将App ID设置为config.xml中widget元素的id属性)并在Finder上双击它,以便它转到Xcode配置文件存储
3)cordova build ios --release --device