使用Swift在iOS中构建通用框架
我已经搜索了很多可靠的资源,这将有助于我在iOS上构建自定义通用框架。 我尝试实现多种技术,但它们并没有帮助我完成任务。 寻求和阅读很多东西有助于我了解更多有关它的知识,最终我建立了一个通用框架。
我想分享我如何轻松构建此框架,
创建可可触摸框架:
打开Xcode, 文件→新建→项目 。 在iOS下,选择Framework&Library,然后选择Cocoa Touch Framework,然后单击“下一步”。
输入您的框架名称,然后单击“下一步” 。
然后选择您的项目位置并创建项目。
选择您的项目,选择目标→项目名称→选择构建设置选项卡。 在构建框架之前,始终将“启用位码”设置为“是” 。
在项目中构建所需的功能。 如果需要,您可以维护多个情节提要。 Framework项目看起来像一个普通的SPA项目,唯一的区别是您只能编译/构建Framework,而实际上不能在同一项目中运行它们。
如果项目仅在“ Simulator”中构建,则它将生成使框架专门在模拟器而非设备上运行的体系结构。 或者,如果项目是在“设备”中构建的,则它将生成使框架仅在设备上运行的体系结构。
因此,在“ Simulator”和“ Device”上都构建项目。
该框架将在“ 产品”文件夹中生成。
该框架将在项目的产品目录中生成,该产品目录具有两个单独的独特框架文件夹,这些文件夹将分别在Simulator和Device上运行。
设备框架:它包含仅为物理设备构建的体系结构。
模拟器框架:它包含仅为模拟器构建的体系结构。
从开发人员的角度来看,开发人员希望获得一个同时在模拟器和Device上运行的通用框架 。
大多数“流行”框架都是作为通用框架构建的,例如Mixpanel,Fabric等,
我写了一个“运行脚本”来生成通用框架。
选择项目目标→编辑模式→归档→后操作→按“ +”→“新建运行脚本操作” 。
UNIVERSAL_OUTPUTFOLDER = $ {BUILD_DIR} / $ {CONFIGURATION}-通用
#确保输出目录存在
mkdir -p“ $ {UNIVERSAL_OUTPUTFOLDER}”
#接下来,计算出我们是否在SIM卡或DEVICE中
xcodebuild -target“ $ {PROJECT_NAME}”-配置$ {CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH = NO BUILD_DIR =“ $ {BUILD_DIR}” BUILD_ROOT =“ $ {BUILD_ROOT}”干净的构建
xcodebuild -target“ $ {PROJECT_NAME}” ONLY_ACTIVE_ARCH = NO-配置$ {CONFIGURATION} -sdk iphoneos BUILD_DIR =“ $ {BUILD_DIR}” BUILD_ROOT =“ $ {BUILD_ROOT}”干净的构建
#步骤2.将框架结构(从iphoneos构建)复制到通用文件夹
cp -R“ $ {BUILD_DIR} / $ {CONFIGURATION} -iphoneos / $ {PROJECT_NAME} .framework”“ $ {UNIVERSAL_OUTPUTFOLDER} /”
#步骤3.将Swift模块从iphonesimulator版本(如果存在)复制到复制的框架目录
BUILD_PRODUCTS =“ $ {SYMROOT} /../../../../ Products”
cp -R“ $ {BUILD_PRODUCTS} / Debug-iphonesimulator / $ {PROJECT_NAME} .framework / Modules / $ {PROJECT_NAME} .swiftmodule /。” “ $ {UNIVERSAL_OUTPUTFOLDER} / $ {PROJECT_NAME} .framework / Modules / $ {PROJECT_NAME} .swiftmodule”
#步骤4.使用lipo创建通用二进制文件,然后将组合的可执行文件放在复制的框架目录中
lipo -create -output“ $ {UNIVERSAL_OUTPUTFOLDER} / $ {PROJECT_NAME} .framework / $ {PROJECT_NAME}”“ $ {BUILD_PRODUCTS} / Debug-iphonesimulator / $ {PROJECT_NAME} .framework / $ {PROJECT_NAME}”“ $ {BUILD_DIR} /${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}”
#步骤5.将框架复制到项目目录的便捷步骤
cp -R“ $ {UNIVERSAL_OUTPUTFOLDER} / $ {PROJECT_NAME} .framework”“ $ {PROJECT_DIR}”
#步骤6.便利步骤,在Finder中打开项目的目录
打开“ $ {PROJECT_DIR}”
科幻
存档完成后将执行此运行脚本。 通用框架将在项目目录本身中生成并打开。
执行/运行框架:
(i)创建一个新项目:
文件→新建→项目 。 选择iOS,然后选择“单视图应用程序” ,然后单击“下一步” 。
并设置产品名称,团队等选项,然后创建项目。
(ii)设置框架依赖项:
将通用框架复制/拖动到该项目。 在Project Explorer中处理框架时,选中“如果需要 , 复制项目” 。
选择项目,选择目标→项目名称→选择常规→滚动到“嵌入式二进制文件” 。 按“ +”并添加框架。
如果“链接的框架和库”中有多个具有相同名称的框架 ,请删除其他框架 ,仅保留其中一个。
真好 现在,通用框架将同时在模拟器和设备上运行。 但是仍然有一个问题。
(iii)删除未使用的体系结构:
假设应用程序在生产中使用我们的自定义通用框架,我们需要删除未使用的架构。 因为Apple不允许具有未使用架构的应用程序进入App Store。
选择项目,选择目标→项目名称→选择构建阶段→按“ +”→新建运行脚本阶段→将该脚本命名为“删除未使用的体系结构脚本” 。
始终将此脚本放置在“嵌入式框架”下 。
为此,我编写了自定义运行脚本,
FRAMEWORK =“ BetterHQ”
FRAMEWORK_EXECUTABLE_PATH =“ $ {BUILT_PRODUCTS_DIR} / $ {FRAMEWORKS_FOLDER_PATH} / $ FRAMEWORK.framework / $ FRAMEWORK”
EXTRACTED_ARCHS =()
用于$ ARCHS中的ARCH
做
脂质-提取“ $ ARCH”“ $ FRAMEWORK_EXECUTABLE_PATH” -o“ $ FRAMEWORK_EXECUTABLE_PATH- $ ARCH”
EXTRACTED_ARCHS + =(“ $ FRAMEWORK_EXECUTABLE_PATH- $ ARCH”)
完成
lipo -o“ $ FRAMEWORK_EXECUTABLE_PATH-merged”-创建“ $ {EXTRACTED_ARCHS [@]}”
rm“ $ {EXTRACTED_ARCHS [@]}”
rm“ $ FRAMEWORK_EXECUTABLE_PATH”
mv“ $ FRAMEWORK_EXECUTABLE_PATH合并”“ $ FRAMEWORK_EXECUTABLE_PATH”
仅当将应用程序推送到App Store时,此运行脚本才会删除未使用的Simulator体系结构。
现在,自定义iOS框架已完成,并且仍然通用。
希望本文对希望创建自定义iOS框架的人有用,请❤️向其他人推荐这篇文章😊。 让我知道您的反馈。 🙂