用use_frameworks签名错误! 和独特的configuration文件

我在这里贴上我最后的post:

https://github.com/CocoaPods/CocoaPods/issues/4331

这个问题已经存在了将近一年,仍然没有find合适的解决scheme。

build筑时:

Code Sign error: Provisioning profile does not match bundle identifier: The provisioning profile specified in your build settings (“MyDistributionProfileName”) has an AppID of “com.myorg.myapp” which does not match your bundle identifier “org.cocoapods.PureLayout”. 

注意! 使用(在mypod.podspec文件中)将PureLayout添加到我的pod中作为依赖项: s.dependency 'PureLayout', '3.0.2'

这是我Pod的整个podspec文件:

 Pod::Spec.new do |s| s.name = 'MyPod' s.version = '1.2.34' s.license = { :type => "MIT", :file => "LICENSE" } s.homepage = 'https-:-//bitbucket.org/XXXX123/my-pod' s.authors = { "AuthorName" => "author@myorg.com" } s.summary = 'This isa a cocoa pod that contains the MY framework.' s.source = { :git => "https-:-//bitbucket.org/XXXX123/my-pod", :tag => "#{s.version}" } s.ios.deployment_target = '8.0' s.source_files = 'MyPod/**/*.{swift,h}' s.resource = 'MyPod/*' s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'ONLY_ACTIVE_ARCH' => 'NO'} s.dependency 'PureLayout', '3.0.2' end 

笔记:

  1. 放弃使用CocoaPods不是一种select。

  2. 使用@DimaVartanian修复会导致类似的错误,就像@mgrebenets遇到的一样

    错误ITMS-90035签名无效。 代码对象根本没有签名。 确保您使用分发证书签署了您的应用程序,而不是临时证书或开发证书。 validationXcode中的代码签名设置在目标级别是否正确(它覆盖项目级别的任何值)。 此外,请确保您正在上传的软件包是使用Xcode中的发布目标构build的,而不是Simulator目标。 如果您确定您的代码签名设置是正确的,请在Xcode中select“全部清除”,删除Finder中的“build”目录,然后重新构build您的发布目标。 有关更多信息,请参阅https – : – // developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html“

    错误ITMS-90171无效的捆绑结构 – 不允许使用二进制文件“XApp.app/Frameworks/X.framework/XView.o”。 您的应用程序不能包含独立的可执行文件或库,除了受支持的软件包的CFBundleExecutable。 有关iOS应用程序捆绑结构的信息,请参阅https – : – // developer.apple.com/go/?id=bundle-structure中的“捆绑软件编程指南”。

  3. 我的项目也使用PushNotifications,因此不能使用任何通配符configuration文件。

  4. 这是我的健身房build造线

     gym --clean --scheme ${XCODE_PROJECT_TARGET_NAME} --configuration Release --include_bitcode false --archive_path ${BUILDS_DIR}${PACKAGE_NAME}.xcarchive --output_directory $BUILDS_DIR --output_name "${PACKAGE_NAME}.ipa" --xcargs PROVISIONING_PROFILE=$APP_PROVISION_UUID 

    当应用@DimaVartanian修复程序时,此行无任何错误,但是如上所述,在上载过程中会导致错误ITMS-90035错误ITMS-90171

    这是我的上传一个版本的试行:

     pilot upload --skip_submission --username ${APPLE_ID_USERNAME} --team_id ${APPLE_ITUNES_CONNECT_TEAM_ID} --verbose --ipa ${BUILDS_DIR}${PACKAGE_NAME}.ipa --skip_waiting_for_build_processing true 
  5. 我也可以确认使用xcode进行编译/存档/上传时存在相同的问题。

  6. 将这个--export_options "ExportOptions.plist"添加到gym命令行,没有任何区别。 也尝试通过xcargs失败--xcargs "PROVISIONING_PROFILE=$APP_PROVISION_UUID exportOptionsPlist=$EXPORT_OPTIONS_PLIST"

    该文件的内容如下:

     <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>teamID</key> <string>TEAMID123</string> <key>uploadSymbols</key> <string>NO</string> <key>compileBitcode</key> <false/> <key>uploadBitcode</key> <false/> <key>method</key> <string>app-store</string> </dict> </plist> 

我希望CocoaPods团队能够快速解决这个问题。

简而言之 – 失败的结局是以下顺序:

  1. 在Objectvie-C中创build基础项目或者采用任何旧的维护的Objective-C项目
  2. 在Swift中创build并实现一个框架(Cocoa Touch Framework)项目
  3. 为该框架创buildpodspec并将其上传到存储库
  4. 使用CocoaPods将该框架包含到基础项目中
  5. 在模拟器和有线设备上构build和运行应用程序是可以的(一切按预期工作)
  6. build立和/或上传到iTunesConnect是不行的,它失败了!

稍后我会尝试添加一个示例项目,以演示该问题。

好的,所以我用自己的方式解决了这个问题。 通常情况下,解决scheme比以前想象的更容易。

错误原因错误ITMS-90171这次是podspec文件中的一个指令。

这一个: s.resource = 'MyPod/*'

不知道我是怎么错过的,但是'MyPod / *'字面意思是,除了graphics资源包含* .swift文件之外,还包括MyPod目录中的所有内容。

所以稍微修改一下, s.resource = 'MyPod/Graphics.xcassets'行更改为: s.resource = 'MyPod/Graphics.xcassets'解决了这个问题。 没有错误ITMS-90171了。


但是,在这里我们仍然需要解决(由@DimaVartanian提出的)解决scheme,该解决scheme修复了cocoapods提供的框架的代码签名要求。

修复本身就是把这个代码添加到基础项目的“Podfile”中:

 post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = "" config.build_settings['CODE_SIGNING_REQUIRED'] = "NO" config.build_settings['CODE_SIGNING_ALLOWED'] = "NO" end end end 

这将通过项目中的所有pod目标(在“pod安装”之后),并通过更改某些设置来删除代码签名要求,如代码中所示。

有一些传闻,升级到XCode 8后,这个解决方法将不再需要。我还没有find任何官方的确认,但我希望这是真的。