在Swift中创建一个私有iOS框架并使用CocoaPods分发它

框架是代码和资源的集合,用于封装在多个项目中有价值的功能。

一个swift框架包括一个Swift模块文件和一个共享库,其中Swift文件文件传达了框架API的源级别信息,共享库提供了在运行时加载的已编译实现。

有多种发布iOS框架的方法。 可以通过将其推送到任何git仓库管理器(例如github,gitlab等)来分发它。 在这里,您可以将整个框架项目推送到远程仓库,并使您的源代码可见,或者您可以在不共享源代码的情况下推送您的iOS框架。

在本文中,我们将学习如何快速创建一个私有框架,并在不共享其源代码的情况下使用CocoaPods分发它。

让我们从创建框架开始。

创建一个Swift框架

在这里,我们将创建一个HelloWorld框架,其中包含一个Logger类,该类又具有一个func类printHelloWorld ,该类将打印“ Hello World!”文本。

开启Xcode

从顶部菜单中选择Cocoa Touch Framework ,然后单击下一步。

将产品名称设置为HelloWorld并选择语言为Swift。

单击下一步创建。

如果在项目中展开HelloWorld文件夹,则会找到两个文件: Info.plistHelloWorld.h-后者是用于在框架和主机应用程序之间进行通信的头文件。

单击文件新建文件

选择“ 可可接触类” ,然后单击“ 下一步”。

将类名称设置为Logger并确保它是NSObject的子类。

单击下一步并创建。

现在Logger类将如下所示

 类记录器:NSObject { 
  } 

用以下代码行替换Logger类。

  @objc公共类记录器:NSObject { 
  @objc公共类func printHelloWorld(){ 
 打印(“ Hello World!”) 
  } 
}

Logger是一个公共类,其中包含printHelloWorld函数,该函数打印“ Hello World!Hello World! ”文字。

添加了公共说明符,以便主机应用程序可以访问Logger类和printHelloWorld函数。

@objc→这告诉编译器可以从Objective-C访问这段Swift代码如果主机应用程序是用Objective-C编写的,则很有用

生成通用框架

要制作可在设备和模拟器上使用的通用框架,您可以配置一个归档后脚本,该脚本将在存档后为iOS模拟器构建框架,并将模拟器和iOS二进制文件合并为一个胖通用框架。

请按照以下步骤生成通用框架。

  • 转到构建设置->体系结构->仅构建活动体系结构设置为否。
  • 在iPhone 5和iphone 6或更高版本的模拟器中构建框架,以确保您的框架同时支持i386和x86_64体系结构。
  • 要使Xcode在自动存档后运行脚本,请选择HelloWorld目标,单击“ 产品”->“方案”->“编辑方案” (或Cmd + Shift + <),然后为“ 存档”命令配置“运行脚本”后处理:
  • 复制以下运行脚本,并将其粘贴到“运行脚本”窗口中。
  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}” 
 科幻 
  • 确保为“从以下版本提供构建设置”设置选择HelloWorld ,然后单击“ 关闭”以应用更改。
  • 最后,通过单击菜单栏中的产品 –>存档来存档框架。 如果该选项显示为灰色,请确保选择一个物理iOS设备,而不是iOS模拟器。
  • 查找器应打开其中包含通用HelloWorld.framework项目目录。

右键单击它,然后选择“ 显示原始文件” ,您将在其中找到所需的通用框架,然后将其复制并粘贴到某个文件夹中。

有了通用框架,您就可以在主机应用程序中使用它了。

在主机应用中进行测试

  • 打开您要在其中集成HelloWorld框架的主机应用程序, 或者在没有现有应用程序的情况下创建一个新的xcode项目。
  • 转到项目( 主机应用程序 )检查器的“ 常规”选项卡,然后向下滚动到显示“ 嵌入式二进制文件”的位置 。 单击+按钮,然后单击添加其他 。 Finder窗口将下拉,在这里您需要选择HelloWorld.framework

注意:如果主机应用是用Objective C编写的,请进入Build Settings(构建设置) →在顶部,选择All and Combined(所有并合并) →在Build Options构建选项)下 ,将Always Embed Swift Standard Libraries始终嵌入Swift标准库设置Yes

导入框架

  导入HelloWorld // Swift 
  @import HelloWorld;  // 目标C 

在viewController文件的顶部(如果主机应用程序是用Objective C编写的,则为viewController.m文件)的顶部添加import语句。

您应该能够访问该框架的Logger类和printHelloWorld函数。

  Logger.printHelloWorld()。 

您已经成功创建并集成了Swift Universal Framework! ✌️

使用Cocoa Pod分发Swift框架。

现在,您已经创建了框架,您希望它是私有的,并希望将其分发给组织内的其他开发人员。

创建一个私有存储库

  • 如果您还没有帐号,请在https://gitlab.com中创建一个帐号。
  • 创建一个新的私人仓库,并将其命名为HelloWorld。
  • 将MIT许可证添加到您的项目。

注意:您还可以在其他任何基于Web的Git存储库管理器(如github,bitbucket等)中创建私有存储库。

安装CocoaPods

显然,要创建一个Pod,您需要安装CocoaPods。

遵循《 CocoaPods安装指南》来安装CocoaPods。

创建一个Pod Spec文件

创建一个新文件夹,并将其命名为“ 远程”(在您的桌面(或所需位置)中)。

打开终端并使用cd切换到“远程”文件夹。

运行以下命令:

  git clone https://gitlab.com/YOUR_USERNAME/HelloWorld.git    (指向您的git存储库的网址) 

这将克隆HelloWorld存储库,使用cd切换到Remote文件夹中的HelloWorld存储库。

现在,将二进制文件HelloWorld.framework复制粘贴到HelloWorld存储库中。

运行以下命令:

  pod spec创建HelloWorld 

这将在当前文件夹中创建文件HelloWorld.podspec 。 它是一个模板,描述了吊舱及其建造方式。 在文本编辑器中打开它。

用以下内容替换podspec文件的内容。


#确保运行`pod spec lint HelloWorld.podspec'以确保这是一个
#有效的规范,并在提交规范之前删除所有包括此在内的评论。

#要了解有关Podspec属性的更多信息,请参见http://docs.cocoapods.org/specification.html
#要在CocoaPods回购中查看工作Podspecs,请参阅https://github.com/CocoaPods/Specs/
  Pod :: Spec.new do | s | 
  #――― Spec Metadata ―――――――――――――――――――――――――――― ――――――――――――――# 

#这些将帮助人们找到您的图书馆,同时
#感觉像是在做杂事,这绝对对您有利。 的
#summary应该为tweet-length,描述应更深入。
  s.name =“ HelloWorld” 
  #s.version =“ INITIAL_VERSION OR TAG” 
s.version =“ 1.0.0”
  s.summary =“ HelloWorld是一个框架” 
  s.homepage =“ https://gitlab.com/YOUR_USER_NAME” 
s.description =“ HelloWorld是一个具有记录器类和printHelloWorld函数的快速框架”
  s.license =“ MIT” 
  s.author = {“ YOUR_NAME” =>“ YOUR_MAIL_ID”} 
s.platform =:ios,“ 10.0”
s.ios.vendored_frameworks ='HelloWorld.framework'
#s.swift_version =“框架的快速版本”
  s.swift_version =“ 4.1” 
  s.source = {:git =>“ https://gitlab.com/YOUR_USERNAME/HelloWorld.git”,:tag =>“#{s.version}”} 
  s.exclude_files =“类/排除” 
 结束 

现在回到Termial并运行以下命令

  豆荚皮棉 

这会在本地验证您的库和podspec配置,如果podspec文件中的所有内容都正确,则应该收到以下消息。

  HelloWorld通过了验证。 

行!

现在,您需要将HelloWorld二进制框架和podspec文件推送到gitlab存储库中。

一对一运行以下命令。

  //添加HelloWorld.framework和HelloWorld.podspec 
git添加-A
  //通过提交msg提交更改 
git commit -m“添加框架和podspec文件”
  //将更改推送到远程 
git push -u起源
  //创建一个标签,该版本应与您在podspec文件中提到的版本匹配 
git标签1.0.0
  //将标签推送到遥控器 
git push-标签

接下来,在终端中运行以下命令来测试您的podspec验证

  豆荚皮棉 

如果podspec文件中的所有配置正确,您将获得成功的消息。

  HelloWorld.podspec通过了验证。 

太棒了!👌您距离通过CocoaPods在主机应用程序中测试框架仅一步之遥!

注意:向您要与其共享框架的所有成员授予访问Gitlab存储库的权限。

使用CocoaPods进行测试

创建一个全新的xcode项目并将其命名为Sample

打开终端并使用cd切换到新项目目录。

通过运行以下命令初始化pod

  荚初始化 

这将创建pod文件。

use_frameworks下面添加以下行 在您的pod文件中。

  pod'HelloWorld',:git =>“ https://gitlab.com/YOUR_USERNAME/HelloWorld.git  //指向您的HelloWorld存储库的网址 

保存它,然后通过运行以下命令来安装Pod。

  吊舱安装 

这将从Gitlab存储库中提取HelloWorld框架。

最后,它创建一个Sample.xcworkspace文件。

关闭HelloWorld和新的示例应用程序项目(如果已打开),然后打开新示例项目的Sample.xcworkspace

请按照前面的步骤导入HelloWorld框架,并在Sample应用程序中使用Logger类和printHelloWorld函数。

而已! 您已经成功地迅速创建了一个通用框架,并且能够使用可可豆荚进行分发。

希望本文对希望快速创建通用框架并使用可可豆分发的初学者有用! 😊

让我知道您的反馈。

感谢您的阅读! 如果您喜欢这篇文章,请鼓掌,以便其他人也可以阅读🙂