Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 打包和签署使用Cordova CLI构建的iOS应用程序时出现问题_Xcode_Cordova_Cordova Plugins - Fatal编程技术网

Xcode 打包和签署使用Cordova CLI构建的iOS应用程序时出现问题

Xcode 打包和签署使用Cordova CLI构建的iOS应用程序时出现问题,xcode,cordova,cordova-plugins,Xcode,Cordova,Cordova Plugins,到目前为止,我编译PhoneGap应用程序的所有经验都是通过这项出色的服务获得的。然而,我现在发现自己需要在本地编译,因为我需要使用包含二进制文件的插件 因此,出于这些原因,我需要在本地编译。“太好了!”我想,我会用新的CLI 我已经开发了我的应用程序,我可以通过Xcode通过USB部署在设备上对其进行测试,但试图获得一个发布版本,并在嵌入配置文件的情况下对其进行签名,这是一场噩梦 为了完整起见,除了应用程序开发本身,这是我所做的一切的基本概述 $ pwd /users/adam/dev/my

到目前为止,我编译PhoneGap应用程序的所有经验都是通过这项出色的服务获得的。然而,我现在发现自己需要在本地编译,因为我需要使用包含二进制文件的插件

因此,出于这些原因,我需要在本地编译。“太好了!”我想,我会用新的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)
然而,这是一个DEV构建。生成的文件位于
build/emulator/
文件夹中,当我尝试对其进行签名时,我被告知由于I386体系结构(这表明它是一个开发版本),因此未对其进行签名

尝试对此生成进行签名会导致相同的问题


此时,我开始尝试直接在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'
$test-e~/.ios/DEV.mobileprovision&echo存在
存在
$xcrun-sdk iphoneos包应用程序-v“platforms/ios/build/emulator/MyApp.app”-o”/users/adam/dev/MyApp/MyApp.ipa”--嵌入“~/.ios/dev.mobileprovision”
错误:无法从“/var/folders/zs/j2hmt69n12sbjm6gyn0m_q4c000gn/T/tyYvYPQKf3/Payload/MyApp.app”读取权限

更新1: 在一个方面有所帮助。我不知道活动方案(我不确定这意味着什么,但当我将鼠标悬停在控件上时,这是工具提示)是如何作为指定键/etc的一部分更改的,但很明显它确实更改了。将其更改回iOS设备,如iPhone,可以让我构建项目,甚至可以存档(据我所知,这意味着它正在创建需要提交到app store的.ipa文件),但我找不到存档文件。它应该在哪里?我可以在Xcode中的某个设置中定义它吗

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

看起来您正试图使用通配符配置文件(XCode屏幕截图)对应用程序进行签名。您可以尝试创建分发证书并将其下载到Mac吗?然后在keychain access应用程序中导入.cer文件(双击即可),并双击provprofile

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

希望这能有所帮助。。。
Eddy

我从您的截图中看到的另一个问题是,我认为您无法使用开发者签名identity构建归档(发布)版本,您需要创建分发证书,并将该证书用于发布(归档)版本。

如果您设法在Xcode中创建归档,然后,Xcode知道您的签名证书和配置文件,所以cordova build ios--release--device应该可以

这些步骤是:

1) 通过下载并双击Finder中的iOS开发者证书(或通过Xcode获取),将iOS开发者证书导入密钥链

2) 下载您的配置文件(App ID设置为config.xml中widget元素的ID属性),并在Finder上双击它,使其进入Xcode配置文件存储


3) cordova build ios--release--device

请查看我刚才添加到问题末尾的更新。除此之外,通配符配置文件有什么问题?我们使用它们,这样我们就不必为我们制作的每个应用程序创建单独的配置文件,因为测试人员是相同的,并且他们在生产中都生活在相同的RDN命名空间下。。。这是一个我不知道的反模式还是什么?事实上,这是问题之一。
$ 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 build ios --release
 <same result as previously>
$ 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'