当上传iOS应用程序到App Store时,Xcode试图匹配框架捆绑ID

开发我的第一个iOS应用程序4个月后,是时候把它提交给App Store 。 我在iTunes Connect创build了应用程序,填写了所有的细节,并在ConnectXcode设置了正确的Bundle ID 。 不过,我最近三天努力解决这个奇怪的问题。 这似乎是Xcode试图上传Cocoapods框架,而不是我的主要应用程序。

归档后,我去了Window > Organizer > Validate... 我看到以下屏幕:

在这里输入图像说明

错误:

在这里输入图像说明

(对于googlers:没有find合适的应用程序logging,请确认您的包标识符' org.cocoapods.Alamofire '是否正确)。

错误消息表明它试图根据框架的名称来匹配一个Bundle ID ,而不是我自己的bundle(例如com.organization.AppName )。 我无法在任何地方find答案。 我尝试在我的Podfile (其中有use_frameworks!),以及我的不同的conf组合,但没有成功。

 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 

在这里输入图像说明

所有的密码设置为自动

问题:

  • 我正在做的步骤是正确的吗?
  • 为什么Xcode试图匹配一个framework's bundle id而不是我的主要应用程序?
  • 我怎么能通过这个问题,最终提交我的应用程序?

编辑1:我能够通过这个问题,但后来导致了另一个问题,所以我还没有一个解决scheme。 基本上,Alamofire Pod(来自Cocoapods)有一个捆绑编号com.xxx.Alamofire 。 我将其更改为com.xxx.myAppName 。 因此,我可以将它发送到App Store,但是由于以下错误,我无法从TestFlight将iPhone安装到我的iPhone中:

 4/22/16, 12:50:29 AM itunesstored[124]: [ApplicationWorkspace]: Failed to install application: com.xxx.myAppName; /var/mobile/Media/Downloads/5927832272594571027/-6969961974973998640; Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=DuplicateIdentifier, ErrorDescription=The parent bundle has the same identifier (com.xxx.myAppName) as sub-bundle at /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.IVHCuO/extracted/Payload/MyApp.app/Frameworks/Alamofire.framework} 

经过相当一段时间的苦苦挣扎之后,我才能够做到这一点。 基本上,只有阿拉莫菲尔提出这个问题。 以下是我所做的:

  1. 导航器中 ,点击豆荚
  2. 在“ 目标”下,您将看到您的应用正在使用的所有框架。
  3. 点击Alamofire (或导致问题的框架)。
  4. 编辑软件包标识符 。 如果您的应用程序套件ID是com.company.appNamecom.company.appName.Alamofire在其中写入com.company.appName.Alamofire

我尝试com.company.appName框架, com.company.Alamofire ,没有任何工作。

试图将应用程序提交给iTunes Connect时,我收到了这个确切的错误:“没有find合适的应用程序logging。确认您的包标识符org.cocoapods.Alamofire'是正确的。

我最终通过将Bundle OS Type代码更改为APPL来修复它。

这对我来说是完美的。 我只是将Info.plist右键单击打开为“源代码”,然后将<key>CFBundlePackageType</key>更改为string APPL

 <key>CFBundlePackageType</key> <string>APPL</string> 

刚刚遇到这个问题,试图上传到App Store时显示以下错误。

iTunes Store操作失败。

没有find合适的应用logging。 validation你的包标识符'组织。 cocoa豆。阿拉莫菲“是正确的

我们在尝试上传(同时使用Cocoapods)时,遇到了这个问题,并且找不到修复程序,完全从我们的项目中删除了Cocoapods,而是手动添加了每个Pod作为框架。

而……上传到App Store仍然失败,基本上是一样的错误! 🤔

iTunes Store操作失败。

没有find合适的应用logging。 validation你的包标识符'组织。 alamofire .Alamofire“是正确的

所以这看起来可能是Xcode本身的框架使用相关的错误。

发现这不一定是由Cocoapods引起的,我们决定继续使用Cocoapods,并提出以下步骤来解决这个问题。

修正:

我们的项目包含2个目标(忽略unit testing目标等)。 1(我们称之为MyApp ),另一个包含networking层和其他非特定于应用程序的function(让我们称之为MyAppKit )。

  1. CFBundlePackageType (也称为Bundle OS Type code )添加到MyApp的Info.plist并将其设置为APPL
  2. 确保项目MyApp和目标MyApp都具有生成设置Always Embed Swift Standard Libraires作为Yes
  3. 确保目标MyAppKit具有生成设置Always Embed Swift Standard Libraires作为No

仍在研究这里究竟发生了什么,但是认为这对于目前正在经历这种情况的任何人都是有用的。

最近我在使用cocoapods发布应用程序时也有同样的问题。 这是Objective-C项目,并且已经将Pod作为dynamic框架进行了整合。

这已经报告错误 。

所以我build议下面两个替代方法来解决这个问题:

  • 使用静态库而不是dynamic框架。 为此,您可以评论#use_frameworks! 在你的pod文件中。

  • 如果你需要使用框架,你可以尝试下面的步骤:

    1. 将您的框架作为embedded式二进制添加到Xcode目标中。

    2. 在目标的构build阶段,添加一个运行脚本:

示例脚本:

 # Stripping framework only for archive if [ "$ACTION" = "install" ]; then FRAMEWORK_NAME="Framework name" SCRIPT_FILE_NAME="strip-framework.sh" # Set working directory to product's embedded frameworks cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/${FRAMEWORK_NAME}.framework" # Get architectures for current file ARCHS="$(lipo -info "${FRAMEWORK_NAME}" | rev | cut -d ':' -f1 | rev)" for ARCH in $ARCHS; do if ! [[ "${VALID_ARCHS}" == *"$ARCH"* ]]; then # Strip non-valid architectures in-place lipo -remove "$ARCH" -output "$FRAMEWORK_NAME" "$FRAMEWORK_NAME" || exit 1 fi done echo "Framework was successfully stripped with unsupported architectures" fi # Removing script from framework folder if [ -f ${SCRIPT_FILE_NAME} ]; then rm -rf "${SCRIPT_FILE_NAME}" fi 

注意:请在此脚本中replace您的框架名称,确保将此脚本文件命名为“strip-framework.sh”放入框架目录的顶层。

第三方框架从来没有由供应商签署和消费者的责任。 因此,当您存档时,它会将您的框架与您的应用程序捆绑在一起。 但是做完之后,应用程序加载器会将你的包标识符视为框架之一。 它的奇怪的东西呢。

经过两天左右的工作,我终于可以发布我的应用了。

即使你可以通过这个棘手的提交,它将永远不会被安装在设备上。

最后,我得到了一个完美的解决scheme,并找出原因。 这是因为你的第三方框架有一些问题。 例如,在我的情况下Quickblox框架从来不支持位码。 所以我不得不在主要目标和框架的构build设置中禁用bitcode。 这将确定您的问题。

请查看此屏幕截图: 禁用位码 我希望这会帮助你们。 干杯!

如果你的apptitle有通常的斜线“/”,那么xcode没有签名,并认为我正在上传第一个框架org.cocoapods。

我做了什么 – 把斜线改成了类似的符号/

(第一个斜线,下一个 – 其他unicode符号://)

在我的情况下,我不得不从Pods子项目中删除configuration文件设置 在这里输入图像说明