5

我正在使用 phonegap CLI 3.1 和 XCode5。我正在尝试通过 Phonegap CLI 和 Xcrun 为发布模式生成构建。我不想使用 Phonegap Build 来上传 mobileprovision 或它们的任何过程。我想通过 xcrun 来分配 mobileprovision 来发布构建。

1) 科尔多瓦构建 ios --release

通过命令“/Applications/MAMP/htdocs/MyTest/MyTestApp/platforms/ios/cordova/build”在平台“ios”上编译应用程序--release平台“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)" - -嵌入“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)
环境变量:
HOME = /Users/mymac
SUDO_GID = 20
SDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk
VERSIONER_PERL_PREFER_32_BIT = no
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 --签署 iPhone 发行版: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: code object is not signed at all
    in architecture :i386
    ] 代码设计检查失败:ios/build/emulator/MyTestApp.app:代码对象根本没有签名在架构中:i386

完成检查原始应用程序

嵌入“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 程序 /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: 代码对象根本没有签名]
    错误:无法从“/tmp/W81FhZ9VAH/Payload/MyTestApp.app”读取权利
4

4 回答 4

2

嗯,我也遇到了类似Shashi的问题。

从 shell 运行 'cordova buld ios [--release]' 然后执行 'xcrun ...' 之后它对我有用。

但是:从脚本中运行此序列时,我也收到“Codesign check failed ...”错误...

如果我在 cordova 和 xcrun 调用之间的脚本中插入(喜欢)一个“等待”循环,它就可以工作。

所以 - 对我来说 - 似乎科尔多瓦在尚未完全完成时返回外壳(?)

事实是,如果我像这样编写脚本

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

它对我有用。 问题:这是cordova/phonegap中的错误吗???

于 2013-12-02T09:44:45.060 回答
2

同时我发现:事实是,当cordova退出并返回shell时,cordova相关的活动还没有完成!

在cordova 退出后需要一段时间才能显示“platforms/ios/AppName/_CodeSignature/CodeResources”文件。该文件显然对于由 xcrun 命令启动的“代码设计”的成功至关重要。

所以我在我的脚本中做(我称之为'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 ...

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

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

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

错误!??

编辑(05.12.2013):这是因为 Jenkins 服务无法访问钥匙串。例如,在运行构建脚本之前在 Jenkins 工作中解锁钥匙串对其进行排序。(可能不是最优雅的解决方案,但至少它证明问题不在脚本中:)

于 2013-12-03T10:14:51.667 回答
2

所以,最后我让一切正常工作......:D

Jenkins 抱怨“代码设计...”运行失败的问题是 MacOS(配置)问题

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

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

喜欢:在詹金斯的“执行外壳”工作中

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

这可能不是 100% 最好的解决方案 - 但现在它可以工作:P

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

于 2013-12-04T12:39:11.973 回答
1

为了跳过代码签名,您可以从控制台执行手动构建,如下所示:

xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO 另外使用 -configuration、-target 和 -sdk 参数来定义您的构建设置。

要禁用代码签名:

*转到/应用程序。右键单击 XCode 并选择“显示包内容”。将 Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/SDKSettings.plist 复制到您的桌面。(确保实际复制和粘贴。没有拖放)打开它并在 DefaultProperties 下将 CODE_SIGNING_REQUIRED 设置为 NO。将其复制回来并替换原始文件。重新启动 XCode。打开你的项目。在 Project Navigator 中,选择您的项目并打开项目的 Build Settings 部分(而不是任何特定目标)在 Code Signing 下找到 Code Signing Identity,对于 Debug 和 Release 模式,将 Any iOS SKD 设置为 Don't Code Sign。现在您应该能够构建您的项目而不会出现任何错误。*

要制作 IPA:

在“Project Navigator”中选择 Products 右键单击​​ [NameOfYourProject].app 并选择“Show in Finder”。创建一个文件夹并将其命名为 Payload 将 [NameOfYourProject].app 移动到 Payload。压缩 Payload 并将其重命名为 [NameOfYourProject].ipa

于 2013-11-15T09:35:03.197 回答