5

到目前为止,我编译 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...
 <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文件夹并将其替换为指向存在于外部的共享www文件夹的符号链接这些 phonegap 项目目录。

这是支持的行为;--link-toCLI 允许您通过标志生成带有符号链接的应用程序(请参阅cordova help create详细信息)。但是,这样做似乎有问题;所以我采取了预先完成所有应用程序配置,然后www在一切准备好编译后用符号链接替换生成的文件夹。

此时,我可以部署到 iOS 模拟器或 Android 模拟器,也可以通过 USB 部署到设备,一切正常;我所有的插件都可用并按预期运行。所以我准备编译一个发布版本。安卓很简单。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'

更新1:

这个 SO 问题在一个方面有所帮助。我不知道活动方案(我不太确定这意味着什么,但这是我将鼠标悬停在控件上时的工具提示)作为指定键/等的一部分而发生了变化,但显然它确实发生了变化。将其更改回 iOS 设备,如 iPhone,允许我构建我的项目,甚至存档(据我所知,这意味着它正在创建我需要提交到应用商店的.ipa文件),但我找不到存档文件。它应该在哪里?我可以在 Xcode 的某个设置中定义它吗?

更新 2:

通过摆弄证书和配置文件,我终于能够从 Xcode 创建一个存档,有人告诉我这是一个发布版本(是吗?)。理想情况下,我希望能够从命令行构建,这样我就可以尽可能地自动化它,所以这就是我早上要学习的地方。在这方面的任何建议都将非常受欢迎!

4

3 回答 3

6

如果您设法在 Xcode 中创建了存档,那么 Xcode 就知道您的签名证书和配置文件,因此cordova build ios --release --device应该可以做到。

步骤是:

1) 通过在 Finder 中下载并双击它(或通过 Xcode 获取),将您的 iOS 开发者证书导入到钥匙串中

2) 下载您的配置文件(App ID 设置为 config.xml 中小部件元素的 id 属性)并在 Finder 上双击它,以便进入 Xcode 配置文件商店

3)cordova build ios --release --device

于 2014-12-24T08:10:57.510 回答
2

看起来您正在尝试使用通配符配置文件(XCode 屏幕截图)对应用程序进行签名。您可以尝试创建分发证书和 provprofile 并将其下载到您的 Mac 吗?然后在钥匙串访问应用程序中导入 .cer 文件(双击就足够了)并双击 provprofile。

现在您应该能够从 XCode 构建设置中的发布下拉列表中选择适当的值。

希望这会有所帮助... Eddy

于 2014-03-25T16:15:20.260 回答
1

我从您的屏幕截图中看到的另一个问题是我认为您不能使用开发人员签名身份构建存档(发布)版本,您需要创建分发证书并将其用于发布(存档)版本。

于 2014-03-26T13:40:02.560 回答