使用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框架的人有用,请❤️向其他人推荐这篇文章😊。 让我知道您的反馈。 🙂