使用use_frameworks签名错误!和独特的配置文件

时间:2016-08-26 07:25:42

标签: ios objective-c swift xcode cocoapods

我在这里的初步讨论中粘贴了我的最后一篇文章:

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

此问题已存在近一年,但仍未找到适当的解决方案。

建设时:

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不是一种选择。

  2. 使用@DimaVartanian修复导致类似的错误,如@mgrebenets

      

    错误ITMS-90035 签名无效。代码对象根本没有签名。确保您已使用分发证书(而非临时证书或开发证书)对您的应用程序进行了签名。验证Xcode中的代码签名设置在目标级别是否正确(覆盖项目级别的任何值)。此外,请确保您上传的软件包是使用Xcode中的Release目标而不是Simulator目标构建的。如果您确定您的代码签名设置正确,请在Xcode中选择“全部清除”,删除Finder中的“构建”目录,然后重建您的发布目标。有关详细信息,请参阅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,因此无法使用任何通配符配置文件。

  4. 这是我建造建筑物的健身房线

    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"添加到健身房命令行,没有任何区别。尝试通过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>
    
  7. 我希望CocoaPods团队能够迅速解决这个问题。

    简而言之 - 失败的是以下序列的结束:

    1. 在Objectvie-C中创建基础项目或使用任何旧维护的Objective-C项目
    2. 在Swift中创建并实现框架(Cocoa Touch Framework)项目
    3. 为该框架创建podspec并将其上传到存储库
    4. 使用CocoaPods
    5. 将该框架包含到基础项目中
    6. 在模拟器和有线设备上构建和运行应用程序(一切正常工作)
    7. 构建和/或上传到iTunesConnect不行,它失败了!
    8. 我稍后会尝试添加一个示例项目来演示此问题。

1 个答案:

答案 0 :(得分:4)

好的,所以我这次以自己的方式解决了这个问题。 通常,解决方案比以往任何时候都容易。

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

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

不知道我是怎么错过那个,但是&#39; MyPod / *&#39;字面上说,包括MyPod目录中的所有内容,除了图形资源外还包含* .swift文件。

通过将该行更改为:s.resource = 'MyPod/Graphics.xcassets'来解决问题。没有错误ITMS-90171。

然而, 在这里,我们仍然需要采用一种解决方法(由@DimaVartanian提出)来修复cocoapods提供的框架的代码签名要求。

修复本身就是将此代码添加到基础项目&#39; Podfile&#39;:

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目标(在&#39; pod install&#39;之后)通过更改某些设置来删除代码签名要求,如代码中所示。

有一些谣言说,升级到XCode 8后不再需要这种解决方法。我没有找到任何官方确认,但我希望这是真的。