到目前为止,我编制PhoneGap应用程序的所有经验都来自优秀的PhoneGap:Build服务。但是,我现在发现自己处于需要本地编译的情况,因为我需要使用包含二进制文件which precludes it from being included for use with PG:B的插件。
因此,由于这些原因,我需要在本地编译。 "大&#34!;我想,我只是使用新的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...
<snip>
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
文件夹并替换它使用符号链接到这些phonegap项目目录之外的共享www文件夹。
这是受支持的行为; CLI允许您通过--link-to
标志使用符号链接生成应用程序(有关详细信息,请参阅cordova help create
)。但是,这样做seems to have issues;所以我已经准备好先完成所有应用程序配置,然后在所有内容准备好编译后用符号链接替换生成的www
文件夹。
此时,我可以部署到iOS模拟器或Android模拟器,我可以通过USB部署到设备,一切正常;我的所有插件都可用,并按预期运行。所以我准备编译一个发布版本。 Android很简单。 iOS,不是那么多。
$ cordova build ios
<snip>
** 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})"
<snip>
Codesign check fails : platforms/ios/build/emulator/MyApp.app: code object is not signed at all
In architecture: i386
<snip>
我试图从cordova CLI生成发布版本。我无法在任何地方找到--release
标记,但CLI不会抱怨,如果它没有识别标记,通常会这样做。
$ cordova build ios --release
<same result as previously>
尝试签署此版本会导致同样的问题。
此时,我开始尝试直接在Xcode中工作。据我所知,我已正确设置.mobileprovision
文件和签名凭据:
设置这些值后,Xcode不再允许我构建:
所以我被困住了:我别无选择,只能在本地进行构建,而我无法弄清楚如何构建它以进行发布和签名!请帮忙!
此外,如果我尝试嵌入配置文件,由于权利问题而失败。我不完全确定这意味着什么,但我希望它是使用开发构建的结果,并且解决它也将解决这个问题。
$ 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"
<snip>
error: Failed to read entitlements from '/var/folders/zs/j2hmt69n12sbjm6gyn0m_q4c0000gn/T/tyYvYPQKf3/Payload/MyApp.app'
This SO question在某方面有所帮助。我不知道主动方案(我不确定这意味着什么,但是当我将鼠标悬停在控件上时的工具提示)在指定键/等时被改变了,但是显然它确实如此。将此更改回iOS设备,如iPhone,可以让我构建我的项目,甚至存档(据我所知,这意味着它正在创建。 ipa 文件我需要提交到应用商店),但我无法找到存档文件。应该在哪里?我可以在Xcode中的某个设置中定义它吗?
通过摆弄证书和配置文件,我终于能够从Xcode创建一个存档,我已经告诉它是一个发布版本(是吗?)。理想情况下,我希望能够从命令行构建,以便尽可能地自动化它,这样我就可以在早上起床了。在这方面的任何建议都会非常受欢迎!
答案 0 :(得分:6)
如果您设法在Xcode中创建存档,那么您的签名证书和配置文件对Xcode来说是已知的,因此 cordova build ios --release --device 应该可以实现。
步骤如下:
1)通过在Finder中下载并双击它(或通过Xcode获取)将iOS开发人员证书导入到钥匙串中
2)下载您的配置文件(将App ID设置为config.xml中widget元素的id属性)并在Finder上双击它,以便它转到Xcode配置文件存储
3)cordova build ios --release --device
答案 1 :(得分:2)
看起来您正尝试使用通配符配置文件(XCode屏幕截图)对应用进行签名。您可以尝试创建并下载分发证书和provprofile到您的Mac?然后在钥匙串访问应用程序中导入.cer文件(双击应该足够)并双击provprofile。
现在,您应该能够从XCode构建设置中的版本下拉列表中选择适当的值。
希望这有点帮助...... 涡
答案 2 :(得分:1)
我从您的屏幕截图中看到的另一个问题是我认为您不能使用Developer Signing Idenetity构建存档(发布)版本,您需要创建一个分发证书并将其用于发布(存档) )版本。