IBM Worklight / MobileFirst 6.x / 7.0 – 使用buildtime.sh脚本时出现“代码对象根本没有签名”错误
将我的Worklight应用程序上传到iTunes时发生错误。
应用程序validation失败,出现以下错误:
无效的签名。 代码对象根本没有签名。 path[MyApp.app/buildtime.sh]中的二进制文件包含无效签名。 确保您使用分发证书签署了您的应用程序,而不是临时证书或开发证书。 validationXcode中的代码签名设置在目标级别是否正确(它覆盖项目级别的任何值)。 此外,请确保您正在上传的软件包是使用Xcode中的发布目标构build的,而不是Simulator目标。 如果您确定您的代码签名设置是正确的,请在Xcode中select“全部清除”,删除Finder中的“build”目录,然后重新构build您的发布目标。 欲了解更多信息,请参阅https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html
我的问题是我2周前提交了相同的申请,工作正常。 今天的版本只改变了www /文件夹的内容,并且因为这个错误而失败。
我GOOGLE了这个问题,发现Dropbox API的Codesign 在Xcode 4.6.3中失败:“代码对象根本没有签名” ,但是我尝试添加–deep选项,这对我没用。
这可以与buildtime.sh脚本有关吗? 正如我读到的,它似乎只是更新worklight.plist文件中的buildtime值:
#!/bin/bash # Licensed Materials - Property of IBM # 5725-I43 (C) Copyright IBM Corp. 2006, 2013. All Rights Reserved. # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # Update buildtime in project echo -n ${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app/worklight.plist | xargs -0 /usr/libexec/PlistBuddy -c "Set :buildtime `date +\"%s\"`"
此外,当googlesearch这个问题时,我发现了一些类似的问题: https : //github.com/AppGyver/steroids/issues/918 ,他们似乎使用sh脚本混合应用程序,这使我相信这个问题是关系到build造时间.sh脚本。
我删除了构build时间脚本,并删除了我的Xcode项目上的运行脚本阶段,这一次没有给出错误。
这样做是否安全?
任何人都遇到与Worklight项目相同的错误? 它是关系到buildtime.sh脚本或新的苹果政策?
在MFP开发人员中心发布有关此问题的博客文章: https : //developer.ibm.com/mobilefirstplatform/2015/05/01/recent-changes-in-apples-app-submission-process/
问题是,苹果现在还检查包含在应用程序包(.ipa文件)中的.sh文件是否已签名。
在基于Worklight / MobileFirst平台的应用程序中,正好有一个这样的.sh文件buildtime.sh
被添加到该包中。 这个文件没有理由在结果包中。 该文件仅在构build时需要,而不是在运行时。
有一个简单的解决方法:从Xcode中的目标configuration中删除 ( 不要删除) buildtime.sh
文件(在“构build阶段”>“复制包资源”中)。
IBM Fix Central还提供了iFixes(仅适用于IBM APAR PI39826,Worklight / MFP Studio / CLI;无需更改服务器):
- 6.0.0.2-IF201504301500
- 6.1.0.2-IF201504301501
- 6.2.0.1-IF201504301522
- 6.3.0.0-IF201504301455
- 7.0.0.0-IF201504301556
这个iFix只适用于:
- 新创build的应用程序
- 其原生文件夹被删除并重新生成的应用程序
通过使用iFix,这些应用程序将不会在目标configuration中拥有buildtime.sh文件。
现有的应用程序只能从上述目标configuration中简单地删除.sh文件,然后在Xcode中重新构build。