2015-01-09 104 views
7

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

:这是可能生产(在CocoaPods为例如,与夫特框架)被使用。

回答

6

找到了答案。下面是它是如何做:

  • 导航到目标>构建阶段
  • 点击小“+”图标,选择“新运行脚本生成阶段”
  • 粘贴如下:

    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 
    
+3

这并不工作,但只是添加了一个框架,嵌入子框架被称为“伞架”,并且受到苹果公司的阻碍。看到这个问题的一个很好的答案,为什么这是这种情况:http://stackoverflow.com/questions/7365578/why-are-umbrella-frameworks-discouraged你应该做的:而不是嵌入子框架,你应该最好分开分发你的框架及其依赖关系。 – 2015-07-14 21:51:02

+1

@JonathanEllis这并不总是理想的。例如我已经使用WebP.framework添加了WebP支持。我不希望我的主应用程序,照片编辑扩展和iMessage扩展都必须包含WebP.framework的单独副本。浪费空间... – jjxtra 2016-10-07 14:20:17

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