在框架中嵌入框架(iOS 8+)

Vat*_*not 13 xcode cocoa frameworks dynamic ios

使用Xcode 6或更高版本构建的iOS应用程序允许在其中嵌入动态iOS框架.我正在构建一个共享框架,并希望嵌入一个子框架.我怎么能做到这一点?

注意:这可能的,并且正在生产中使用(例如,在CocoaPods中使用Swift框架).

Vat*_*not 11

找到了答案.以下是它的完成方式:

  • 导航到Target > Build Phases
  • 单击小"+"图标并选择"新建运行脚本构建阶段"
  • 粘贴以下内容:

    cd $BUILT_PRODUCTS_DIR
    
    mkdir $PROJECT_NAME.framework/Frameworks &>/dev/null
    
    for framework in *.framework; do
        if [ $framework != $PROJECT_NAME.framework ]; then
            cp -r $framework $PROJECT_NAME.framework/Frameworks/ &>/dev/null
        fi
    done
    
    Run Code Online (Sandbox Code Playgroud)

  • 这确实有效,但只是补充一点,嵌入子框架的框架被称为"伞形框架",并且被Apple劝阻.看到这个问题的答案就是为什么会这样:http://stackoverflow.com/questions/7365578/why-are-umbrella-frameworks-discouraged你应该做什么:而不是嵌入子框架,你应该最好只是单独分发您的框架及其依赖项. (4认同)

Jus*_*itz 6

@Vatsal Manot的回答对我很有帮助.我修改了一下,还需要签署复制的嵌入式框架.我的脚本如下.

cd $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/Custom.framework/Frameworks
for framework in *.framework; do
    mv $framework $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/
    /usr/bin/codesign --force --sign "iPhone Developer" --preserve-metadata=identifier,entitlements --timestamp=none $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/$framework
done
Run Code Online (Sandbox Code Playgroud)