Swift, iOS 8+ 框架

Swift, iOS 8+ Framework

我想创建一个共享 Swift 库 a.k.a。 Cocoa Touch Framework 在我的两个 iOS 应用程序之间共享。我不是全职 iOS 开发人员,所以我在 XCode 等方面的知识有很多差距

我找到了这篇文章 Creating your first iOS Framework 并认为我有空回家 :-)。可悲的是,我无法让它工作,主要是因为我不知道我要做什么。

我只是想在我的两个应用程序之间创建一个共享 Swift 代码的(私有)框架(库)。我想在框架中使用 CocoaPods 来引入其他框架,例如 Alamofire。我无意制作这个框架public.

我几乎不明白为什么人们会使用 Carthage(相对于 CocoaPods)作为管理框架并将其导入消费应用程序的机制。但是,该示例混合了 Carthage 和 CocoaPods 并设置了一个 Podspec,我认为我不想要它并且让我感到困惑。

在这篇文章中,一般的子项目的概念,将 Carthage 下载的框架拖到框架中以及 "importing" 消费应用程序中的共享框架本身都让我感到困惑。我想知道我为什么这样做以及它的后果是什么。

所以,我是不是走错了路?有没有人有在两个相关应用程序之间私下共享 Swift 代码和其他工件的脑死亡简单方法?

谁能解释一下这个理论?

我几乎没有时间处理我的应用程序,一想到复制代码,我的肉体就会爬行,所以我浪费了无数时间试图找到那个简单的指南,并花了更多时间试图遵循我找到的那些 -一切都以令人失望的结局。

如有任何帮助,我们将不胜感激。

谢谢, 彼得...

我建议你使用 Carthage,因为它更简单并且不会对你的项目文件施加任何限制。我无法在 CocoaPods 方面为您提供帮助,因为我从未使用过它,我将指导您完成 Carthage 所需的步骤:

  1. 如果您还没有安装 Homebrew,它是 OSX 上最常用的包管理器。命令:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  2. 安装迦太基。命令:

    brew update && brew install carthage
    
  3. 使用 iOS Cocoa Touch Framework 模板创建一个新项目。保存时勾选"Create Git repository".

  4. .gitignore 文件添加到您的项目文件夹。如果你在项目目录中,你可以这样做:

    curl https://raw.githubusercontent.com/github/gitignore/master/Swift.gitignore > .gitignore
    
  5. 将你想要的代码添加到项目中,记住框架外只有public个声明可用。

  6. 编辑方案(快捷键 ⌘<)并勾选 Shared。这是 Carthage 工作所必需的。

  7. 提交更改(快捷键 ⌥⌘C),检查每个文件(右键单击 > 全部检查)并输入提交消息(例如 "First version")

  8. 发布标签(Carthage 要求):命令(在项目目录中):

    git tag 0.1 -m "Version 0.1"
    
  9. 运行 以下命令通过 Carthage 验证和构建项目:

    carthage build --no-skip-current
    

您的框架现在应该设置为可以与 Carthage 一起使用。您可以按照 here 的步骤将框架添加到您的 iOS 项目:

  1. 向您的项目添加一个 Cartfile(只是一个名为 Carthage 的文件(无扩展名)),您可以为此使用 Xcode。该文件应包含以下内容:

    git "file:///path/to/your/framework/project/directory"
    github "Alamofire/Alamofire"
    # Other frameworks
    
  2. 运行

    carthage update --platform iOS
    
  3. 打开 Carthage/Build/iOS 文件夹(在 Finder 中)并将每个 .framework 文件拖放到项目设置(常规选项卡)中的 Linked Frameworks and Libraries 部分).

  4. 添加新的 Run Script 阶段(项目设置 > 构建阶段 >“+”按钮)。把行

    /usr/local/bin/carthage copy-frameworks
    

    并将每个框架添加到 "Input Files" 部分:

    $(SRCROOT)/Carthage/Build/iOS/MyFramework.framework
    $(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
    

现在这应该可以了,如果您遇到问题请告诉我。

编辑:当您对库进行更改时,您会这样做:

  1. 提交
  2. git tag 0.2 -m "Version 0.2"

在您使用该框架的项目中,只需 运行 carthage update --platform iOS,无需执行其他操作。

如果您的框架也需要使用 Alamofire,它需要与其他项目相同的 Cartfile 设置。 运行宁carthage update时,Carthage会解析每个框架需要的所有子框架,以及它们的子框架等

可能会发生冲突,例如一个 Cartfile 想要 "Alamofire" ~> "1.0",另一个 "Alamofire" ~> "2.0",但这很少发生。