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。

Interesting Posts