Validation Error: Invalid Bundle. The bundle at … contains disallowed file 'Frameworks'

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

I'm trying to submit an app with the Xcode6 GM, and I get this error on validation. The app has an action extension and a dynamic framework that's shared between the extension and the app itself.

I don't have a file called 'Frameworks' anywhere in the project, so I'm really not sure what this is supposed to mean. Has anyone gotten this issue or have any ideas?

回答1:

Turns out the error is related to using Swift (both the app and the extension make use of Swift).

For the app, I had to set:

Embedded Content Contains Swift Code: YES 

and for the extension:

Embedded Content Contains Swift Code: NO 

Xcode 8 and 9

Looks like this has been renamed to Always Embed Swift Standard Libraries in Xcode 8 and 9. So, for the app:

Always Embed Swift Standard Libraries: YES 

and for the extension:

Always Embed Swift Standard Libraries: NO 


回答2:

The only solution that worked for me was to add this Run Script to the App Extension target:

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" if [[ -d "Frameworks" ]]; then      rm -fr Frameworks fi 

Source: https://github.com/CocoaPods/CocoaPods/issues/4203



回答3:

So 3 steps to fix this from build settings

  1. Container App: Embedded Content Contains Swift Code: YES
  2. Extension: Embedded Content Contains Swift Code: NO
  3. Extension: Runpath Search Path = @executable_path/../../Frameworks


回答4:

In my case, I just upgraded to CocoaPods 1.0.1 and this appears to be a new bug.

The Pod update adds a run script to my Extension's target which creates the Frameworks folder. I found it as I was about to add @Roman's run script to remove it.

Solution was to delete this script from my extension's build phase. Here is the one which needed to go...



回答5:

Remove Every Build Phase for your extension that has embed word in its title.

Additionally:

  • Embedded content contains Swift code must be set to Yes for the extension target.


回答6:

None of the above answers worked for me. This was because the error was caused not by the parent app or it's extension. Rather one of the linked libraries was at fault.

To confirm, first archive using Xcode then using Organiser select the entry and locate using Show in Finder. This will show the .xcarchive file.

Select that file and choose "Show Package Contents".

Select the .app in the Products/Applications folder and again choose "Show Package Contents".

Locate the offending module in the Frameworks folder. For example if the error is:

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'." 

Then in the Frameworks/MyLib.framework the following will probably be visible:

../Frameworks/libswiftContacts.dylib ../Frameworks/libswiftCore.dylib ../Frameworks/libswiftCoreData.dylib ../Frameworks/libswiftCoreGraphics.dylib ../Frameworks/libswiftCoreImage.dylib ../Frameworks/libswiftCoreLocation.dylib ../Frameworks/libswiftDarwin.dylib ../Frameworks/libswiftDispatch.dylib ../Frameworks/libswiftFoundation.dylib ../Frameworks/libswiftLocalAuthentication.dylib ../Frameworks/libswiftObjectiveC.dylib ../Frameworks/libswiftPassKit.dylib ../Frameworks/libswiftUIKit.dylib ../Frameworks/libswiftWebKit.dylib 

These are present because the linked library - or module - that the parent app includes has the EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

Locate the dependent module in Xcode and update the flag:

Note that having overcome this issue the app may still be rejected with an explanatory email from the iTunes Store:

Invalid Swift Support - The Watch OS application has Swift libraries at both... 

Again this comes back to the EMBEDDED_CONTENT_CONTAINS_SWIFT flag. Ensure that only the parent app has this set to YES. Both the WatchKit app and extension must have this flag set to NO. This is as detailed in @Mike's answer above.



回答7:

In my case the solution was to remove my framework from my extension's Embedded Binaries and add it to my extension's Linked Frameworks and Libraries. (Both can be found in the extension's General tab.)



回答8:

If Embed Pods Frameworks script and Roman's script both exist in the same target.

Please check if the Embed Pods Frameworks locates before the other one. If not, just move Roman's script to the last.



回答9:

I was unable to find any settings for Embedded Content Contains Swift Code but I was able to find a setting Always Embed Swift Standard Libraries and setting this to NO for my framework did fix this issue.



回答10:

In my case, there was one CocoaPod library "Blockly" that was specifying Yes for "Always Embed Swift Standard Libraries". After making NO for the option, it worked.



回答11:

  1. Container App: Build Setting -> Embedded Content Contains Swift Code: YES
  2. Extension: Build Setting -> Embedded Content Contains Swift Code: NO
  3. Extension: Build Phase -> added the following Run Script in

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" if [[ -d "Frameworks" ]]; then rm -fr Frameworks fi

  1. (important)Extension: Build Phase -> move the Run Script to the Last (after Embed Pods Frameworks script )


回答12:

I had this problem the first time with XCode 7.1.1 for my app that has a Today Extension (there is no Swift in my project). The script (https://github.com/CocoaPods/CocoaPods/issues/4203) didn't work for me.

Downgrading cocoapods to version 0.39.0.beta.3, running pod install, and then re-archiving solved the problem.



回答13:

If you're using CocoaPods, I would consider deleting the Embed frameworks build phase on the problematic target (the extension), this fixed the problem for me.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!