我的目标是构建一个快速的iOS框架,它使用另外两个框架(作为单独的项目包含),并且在构建之后不应该显示源代码。
是否有一些文本/指南/文档可以解释和引导我完成正确和正确构建此类框架的过程?
我使用运行脚本({3}}构建了具有聚合目标添加和链接框架的框架,我的自定义框架依赖于该框架。我能够将自定义框架的构建添加到我的自定义应用程序,以及其他两个依赖项(再次作为单独的项目),并在设备上运行它。但是,我不相信我自定义框架的正确性。
此外,由于“不支持的架构......”,“CFBundleIdentifier碰撞......”,“无效的捆绑...”,“无效的二进制”等各种错误,我无法将存档上传到Appstore等等。根据各种stackoverflow答案对这些错误进行排序并从TestFlight安装应用程序后,应用程序在启动后崩溃并且根本无法正常工作。
我正在查看各种博客文章,stackoverflow问题/答案和Apple Framework编程指南,但没有任何内容让我全面了解如何在上述条件下构建自定义框架。
我所做的一切只是按照分步教程进行,而不解释步骤的目的。我相信我错过了基础知识。你能帮帮我,给我一些指导吗?
答案 0 :(得分:2)
我能理解你的挫败感。我,前一段时间也搜索过许多关于如何正确编写框架的文档,但是像我一样,我也没有找到任何令人满意的东西。根据我自己的经验,我可以给出一些建议。
在我看来,不要在自己的框架中使用外部库。我真的不知道你的框架目的是什么,但你想要做的大部分事情都可以在不使用外部库的情况下完成。取决于其他库不是一个好主意,特别是如果它是您正在处理的框架。任何时候这些库都会得到更新,甚至更糟糕,如果他们不这样做,你将不得不等待它们更新或找到另一个库。所以如果你从一开始就这样做,我认为它会更好。外部库松散了。
第二个很容易。生成通用框架。我建议你不要使用脚本。我发现的大多数脚本要么已经过时,要么根本不起作用。后来我发现实际上很容易自己生成一个。您可以通过为真实设备构建一次项目,为模拟器构建一次项目。然后,您可以使用命令lipo -create"您的模拟器可执行路径"生成通用二进制文件。 "您的iOS设备可执行路径" -output"您的框架名称"。这样做是因为它结合了你的两个可执行文件并生成了一个通用文件。然后你可以从模块文件中复制模拟器文档并将它们粘贴到你的iphoneos模块文件中。我将分享一个链接,你可以自己完成演练。 https://medium.com/wireless-registry-engineering/create-a-universal-fat-swift-framework-b7409bbfa18f
除非你知道Objective-c,否则这个有点棘手。我建议你使用Objective-C实现你的框架并在它周围编写一个swift包装器。如果你正在创建一个iOS应用程序我不会这么说但是在框架的情况下我仍然认为你应该去Objective-c。这是因为Objective-c已经存在了30多年,而且大多数旧版应用程序都是客观的。如果您希望您的框架能够被Objective-c编码的旧应用程序轻松使用,我建议您使用它。我已经阅读了很多关于人们如何在他们的objective-c应用程序中使用swift编写的框架时遇到问题的帖子。 Swift将是不久的将来第一个也许是唯一的选择,但不仅仅是。从好的方面来说,如果你仍然没有学过Objective-C,那么肯定会让你更好地理解它是如何工作的。这将是一个挑战,但我向你保证,这将是值得的。我有一个很好的阅读,你可以自己检查。 https://academy.realm.io/posts/altconf-conrad-kramer-writing-iOS-sdk/
这是一个非常直接的问题。我建议你坚持苹果命名惯例。这是因为这次您将共享您的代码,人们在尝试集成您的框架时会寻求熟悉。这将使您的代码更容易理解。您可以查看这两个链接以获取更多信息。https://github.com/raywenderlich/objective-c-style-guide(obj-c)https://github.com/raywenderlich/swift-style-guide(swift)
我认为这是一个重要的问题。在实现类框架或函数之前,请考虑框架。考虑一下您是否希望其他人能够使用您的代码部分。您可能希望在用户使用框架时限制用户,并且正确的访问控制是这样做的。您可以轻松地指导用户,以便用户完全按照您希望他们对您的框架执行的操作。
如果您希望您的框架成为专业框架,那么这是必须的。您应该记录用户将使用的每个函数和变量。记录和解释您的代码所做的事情会让很多人的生活变得轻松。你没有任何人试图理解你的代码在半小时内所做的事情,而你可以轻松地为参数做了一个小的解释,并且应该使用一个函数或变量。
最后但并非最不重要的是为您的代码编写测试。这确实需要一些时间,但它确保您的代码按照应有的方式工作。
您一定要查看其他开源库并查看他们所做的工作。通常重新发明轮子是没有意义的,除非你做的事情完全不同,但即便如此,也有非常熟悉的方法来做事。我可以建议你查看地幔sdk(https://github.com/Mantle/Mantle)。另一个是非常受欢迎的Alamofire sdk(https://github.com/Alamofire/Alamofire)以及Realm sdk(https://github.com/realm/realm-cocoa)。这些都是框架的好例子。看看他们。看看他们是如何做的。它将让您深入了解框架的外观。
我知道如果您正在编写应用程序,所有这些要点也可能有效,但是这些要点是您必须与他人共享代码的事实。您可以通过在实现应用程序时不执行其中某些操作进行管理,但对于框架而言,事情确实会发生一些变化。使用易于使用的框架使编码成为一种乐趣总是令人愉快的。这些类型的小东西将使您的框架更受欢迎。快乐的编码。