无法生成cordovaIOS应用程序的发布版本

我正在使用phonegap CLI 3.1和XCode5。 我正尝试通过Phonegap CLI和Xcrun生成发布模式的构build。 我不想使用Phonegap Build来上传mobileprovision或者其他任何程序。 我想通过xcrun来分配mobileprovison来释放构build。

1)cordova build ios –release

通过命令“/ Applications / MAMP / htdocs / MyTest / MyTestApp / platforms / ios / cordova / build”在平台“ios”上编译应用程序 – 释放平台“ios”编译成功。

2)sudo xcrun -sdk iphoneos PackageApplication -v“ios / build / emulator / MyTestApp.app”-o“/Users/mymac/Desktop/Testnew/MyTestApp.ipa”–sign“iPhone Distribution:NAME(TEAM_ID)” – -embed“MyTestApp_Dis.mobileprovision”

打包应用程序:'ios / build / emulator / MyTestApp.app'参数:embed = MyTestApp_Dis.mobileprovision verbose = 1 output = / Users / mymac / Desktop / Testnew / MyTestApp.ipa sign = iPhone Distribution:NAME(TEAM_ID)
环境variables:
HOME = /用户/ mymac
SUDO_GID = 20
SDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk
VERSIONER_PERL_PREFER_32_BIT =没有
MAIL = / var / mail / root
SSH_AUTH_SOCK = / tmp / launch-zsBMC8 / Listeners
LANG = en_US.UTF-8
USER = root
LOGNAME = root
__CF_USER_TEXT_ENCODING = 0x0:0:0
USERNAME = root
PATH = / usr / bin:/ bin:/ usr / sbin:/ sbin:/ usr / local / bin:/ usr / local / git / bin
SUDO_USER = mymac
SHELL = / bin / bash
TERM = xterm-256color
SUDO_COMMAND = / usr / bin / xcrun -sdk iphoneos PackageApplication -v ios / build / emulator / MyTestApp.app -o /Users/mymac/Desktop/Testnew/MyTestApp.ipa –sign iPhone Distribution:NAME(TEAM_ID)–embed MyTestApp_Dis.mobileprovision
SUDO_UID = 501
VERSIONER_PERL_VERSION = 5.12

输出目录:'/Users/mymac/Desktop/Testnew/MyTestApp.ipa'
临时目录:'/ tmp / W81FhZ9VAH'(详细设置时不会在退出时删除)
+ / bin / cp -Rp ios / build / emulator / MyTestApp.app / tmp / W81FhZ9VAH / Payload
Program / bin / cp返回0:[]

检查原始应用程序

  • / usr / bin / codesign –verify -vvvv ios / build / emulator / MyTestApp.app
    程序/ usr / bin / codesign返回1:[ios / build / emulator / MyTestApp.app:代码对象根本没有签名
    在架构:i386
    ]代码签名失败:ios / build / emulator / MyTestApp.app:代码对象根本没有签名架构:i386

完成检查原来的应用程序

embedded“MyTestApp_Dis.mobileprovision”

  • / bin / rm -rf /tmp/W81FhZ9VAH/Payload/MyTestApp.app/embedded.mobileprovision程序/ bin / rm返回0:[]
  • / bin / cp -rp MyTestApp_Dis.mobileprovision /tmp/W81FhZ9VAH/Payload/MyTestApp.app/embedded.mobileprovision Program / bin / cp返回0:[]
  • / usr / bin / codesign -d –entitlements / tmp / W81FhZ9VAH / entitlements_rawixGWnKhi /tmp/W81FhZ9VAH/Payload/MyTestApp.app程序/ usr / bin / codesign返回1:[/tmp/W81FhZ9VAH/Payload/MyTestApp.app:code对象根本没有签名]
    错误:无法从“/tmp/W81FhZ9VAH/Payload/MyTestApp.app”读取授权

嗯,我有类似的问题,像沙市。

当从shell运行'cordova buld ios [–release]',然后再执行'xcrun …'时,它对我来说还行。

但是:当从一个脚本中运行这个序列时,我也会收到一个“Codesign check check failed”错误…

如果我插入(如)cordova和xcrun调用之间的脚本“等待”循环,它的工作原理。

所以 – 对我来说,好像cordova在没有完全完成的情况下返回壳体(?)

事实是,如果我编写我的脚本

#!/bin/bash cordova build ios --release sleep 5 sh -c "xcrun ..." 

它为我工作。 问题:这是Cordova / phonegap中的错误吗?

所以,最后我得到了一切工作好吧…:D

Jenkins抱怨一个失败的'codesign …'运行的问题是一个MacOS(configuration)问题

关键的是允许jenkins访问系统的钥匙链。 Jenkins用户的loginshell允许的访问权限与Jenkins用户帐户(!)下运行的Jenkins服务器进程不同

现在我通过在运行构build脚本之前运行Jenkins作业中的login.keychain解锁来实现这一点

例如:在Jenkins的“执行shell”的工作中,

 security unlock-keychain -p password /Users/Shared/Jenkins/Library/Keychains/login.keychain echo ##### building now ###################### ./buildit.sh ios --release -v 

这可能不是100%最好的解决scheme – 但现在它工作:P

另请参见:[1]: 除非用户login,否则钥匙串将不会从Jenkins脚本解锁

与此同时,我发现:事实是,当cordova退出并返回壳体 – cordova有关的活动还没有完成!

在cordova退出后需要一段时间才能显示“platforms / ios / AppName / _CodeSignature / CodeResources”文件。 这个文件显然对于由xcrun命令启动的'codesign'是必不可less的。

所以我做我的脚本(我称之为“buildit.sh”)

 #!/bin/bash [...] cordova build ios --release signaturefile="platforms/ios/build/device/$appname/_CodeSignature/CodeResources" echo DEBUG:signatur file is $signaturefile while [ ! -f $signaturefile ] do echo waiting sleep 1 done xcrun ... 

然后在一个脚本中的整个构build/打包过程成功。

但是:从我的ContinuousIntegration服务器Jenkins运行脚本,我发现这个标准可能是必不可less的,但还不够。 从CI我仍然得到一个

/ usr / bin / codesign –verify -vvvv […]程序/ usr / bin / codesign返回1:[…]代码对象根本没有签名

错误!??

编辑(05.12.2013):这是由于jenkins服务无法访问钥匙串。 例如,在Jenkins工作中,在运行构build脚本之前对钥匙串解锁进行sorting。 (可能不是最优雅的解决scheme,但至less它可以解决问题而不是脚本:)

为了跳过代码签名,您可以像这样从控制台执行手动构build:

xcodebuild clean build CODE_SIGN_IDENTITY =“”CODE_SIGNING_REQUIRED = NO另外使用-configuration,-target和-sdk参数来定义你的构build设置。

禁用代码签名:

*转到/应用程序。 右键单击XCode并select“显示包装内容”。 将Contents / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS5.1.sdk / SDKSettings.plist复制到您的桌面。 (确保实际上复制和粘贴,没有拖放)打开它并在DefaultProperties下设置CODE_SIGNING_REQUIRED为NO。 将其复制并replace原始文件。 重新启动XCode。 打开你的项目。 在Project Navigator中select您的项目并打开您的项目的生成设置部分(而不是任何特定的目标)在代码签名find代码签名身份和debugging和发布模式设置任何iOS SKD不代码签名。 现在,您应该可以毫无错误地构build您的项目。*

做一个IPA:

在“Project Navigator”中select产品右键单击[NameOfYourProject] .app并select'Show in Finder'。 创build一个文件夹并将其命名为Payload将[NameOfYourProject] .app添加到Payload。 压缩有效负载并将其重命名为[NameOfYourProject] .ipa