2

我的目标是构建一个快速的 iOS 框架,它使用另外两个框架(包括在单独的项目中)并且在构建后不应该泄露源代码。

是否有一些文本/指南/文档可以解释和引导我正确和正确地构建这样一个框架的过程?

我使用此处所示的运行脚本构建了具有聚合目标添加和链接框架的框架,我的自定义框架依赖于这些框架。我能够将构建的自定义框架与其他两个依赖项(再次作为单独的项目)一起添加到我的自定义应用程序中,并在设备上运行它。但是,我不相信我构建的自定义框架的正确性。

此外,由于“Unsupported architectures...”、“CFBundleIdentifier Collision...”、“Invalid Bundle...”、“Invalid Binary”等各种错误,我无法将存档上传到 Appstore . 根据各种 stackoverflow 答案整理这些错误并从 TestFlight 安装应用程序后,应用程序在启动后崩溃并且根本无法运行。

我正在查看各种博客文章、stackoverflow 问题/答案和 Apple 框架编程指南,但没有任何东西能让我全面了解在上述条件下构建自定义框架。

我所做的一切只是按照分步教程进行,而没有解释这些步骤的目的。我确定我缺少基础知识。你能帮助我并给我一些指导吗?

4

1 回答 1

2

我能理解你的沮丧。不久前,我可能也搜索了许多有关如何正确编写框架的文档,但像您一样,我也没有找到真正令人满意的东西。根据我自己的经验,我可以给一些建议。

  1. 没有外部库

    在我看来,不要在你自己的框架中使用外部库。我真的不知道你的框架的目的是什么,但你想做的大部分事情都可以在不使用外部库的情况下完成。依赖其他库不是一个好主意,特别是如果它是您正在开发的框架。任何时候这些库更新或者更糟,如果他们不更新,您将不得不等待它们更新或找到另一个库。因此,与其稍后发生这种情况,我认为如果您从一开始就这样做会更好。所以放松外部库。

  2. 通用框架二进制

    第二个很简单。生成一个通用框架。我建议你不要使用脚本。我发现的大多数脚本要么已经过时,要么根本不起作用。后来我发现实际上自己生成一个非常容易。您可以通过为真实设备和模拟器构建一次项目来做到这一点。然后您可以使用命令 lipo -create "Your simulator executable path" "your iOS device executable path" -output "your框架名称”。它的作用是结合您的两个可执行文件并生成一个通用文件。然后,您可以从模块文件中复制您的模拟器文档并将它们粘贴到您的 iphoneos 模块文件中。如果您可以自己完成演练,我将分享一个链接。https://medium.com/wireless-registry-engineering/create-a-universal-fat-swift-framework-b7409bbfa18f

  3. 使用 Objective-C(如果可以的话)

    除非你知道objective-c,否则这个有点棘手。我建议您使用 Objective-C 实现您的框架并围绕它编写一个快速包装器。如果你正在创建一个 iOS 应用程序,我不会这么说,但如果是一个框架,我仍然认为你应该选择 Objective-c。这是因为 Objective-c 已经存在了 30 多年,而且大多数非常古老的应用程序都在 Objective-c 中。如果您希望您的框架易于被以 Objective-c 编码的旧应用程序使用,我建议您使用它。我已经阅读了大量关于人们如何在他们的 Objective-C 应用程序中使用 swift 编写的框架时遇到问题的帖子。在不久的将来,Swift 将是第一个也可能是唯一的选择,但还不是现在。如果你还没有 你将学习Objective-C,这肯定会让你更好地理解事物是如何工作的。这将是具有挑战性的,但我向您保证,这将是值得您花时间的。我对此有很好的阅读,您可以自己查看。https://academy.realm.io/posts/altconf-conrad-kramer-writing-iOS-sdk/

  4. 命名约定

    这是一个非常直截了当的问题。我建议你坚持苹果命名约定。这是因为这次您将共享您的代码,并且人们在尝试集成您的框架时会寻找熟悉度。这将使您的代码更容易理解。您可以查看这两个链接以获取更多信息。https://github.com/raywenderlich/objective-c-style-guide (obj-c) https://github.com/raywenderlich/swift-style-guide (swift)

  5. 访问控制

    在我看来,这是一个重要的问题。在你的框架上工作时,在你实现一个类或一个函数之前要三思。考虑一下您是否希望其他人能够使用您的那部分代码。您可能希望在用户使用您的框架时限制他们,正确的访问控制是这样做的方法。您可以轻松地引导用户,以便用户完全按照您希望他们对您的框架执行的操作。

  6. 记录您的代码

    如果您希望您的框架是专业的,这是必须的。您应该记录用户将使用的每个函数和变量。记录和解释你的代码做了什么让很多人的生活变得轻松。没有人会花半个小时去理解你的代码做了什么,而你可以很容易地写一个关于参数的作用和应该使用该函数或变量的解释的小解释。

  7. 测试你的代码

    最后但并非最不重要的一点是为您的代码编写测试。这确实需要一些时间,但它可以确保您的代码按应有的方式工作。

  8. 看看其他好的框架

    您绝对应该查看其他开源库并查看他们所做的工作。通常,除非您正在做一些完全不同的事情,否则重新发明轮子是没有意义的,但即便如此,也有非常熟悉的做事方式。我可以建议您查看 mantle sdk(https://github.com/Mantle/Mantle)。另一个是非常流行的 Alamofire sdk ( https://github.com/Alamofire/Alamofire ) 和 Realm sdk ( https://github.com/realm/realm-cocoa )。这些都是很好的框架示例。看看他们。看看他们是怎么做的。它将让您深入了解您的框架应该是什么样子。

我知道如果您正在编写一个应用程序,所有这些要点也可能是有效的,但是使这些成为必须的是您将与他人共享您的代码这一事实。您可以通过在实现应用程序时不执行其中一些来进行管理,但对于框架而言,事情确实会发生一些变化。使用易于使用的框架使编码成为一种乐趣,这总是一种乐趣。这些类型的小东西将使您的框架更受欢迎。快乐编码。

于 2017-10-30T21:04:07.903 回答