Tag: cocoapods

让他们一起工作:Firebase PRD / DEV / Cocoapods

我花了整整一个星期的时间来尝试将新的iOS应用程序隔离到PRD和DEV环境中,并确保我的所有Pod都能正常工作。 实际上,有大量的方法指南(包括中等,堆栈溢出)可用于分隔环境,但它们仍然不在整个组合中: PRD / DEV:通过使用Build Config和Build Scheme分离GoogleService-Info.plist,并使用Build Run Script将它们自动化。 Cocoapods:将所有pod链接到不同的Build Configs,而不会抛出所有编译错误“ No such module”。 经过一番挫折后,我猜想与世界分享我的发现会更好。 希望面临同样问题的人将从中受益。 在完成了整篇文章之后,您将拥有以下内容: 只需1次点击(或最多2次点击😜)即可轻松切换Firebase DEV / PRD环境 xcode会根据您选择的环境自动使用Firebase DEV或PRD配置文件(GoogleService-Info.plist)。 无需人工干预。 您可以在ViewController中显示图像(或标签)以区分您的应用是在DEV还是PRD上运行。 最好的是:您可以确保PRD Google Analytics(分析)数据不会被所有这些DEV&TEST数据淹没。 酷吧? 让我们潜入! 此步骤将涵盖以下内容: 生成配置分离 分离建造方案 1.1。 单独的构建配置 通常,xcode会生成2个生成配置“ Debug”和“ Release”,作为新项目的标准问题。 您将把两个配置都复制到所谓的DEV配置中。 打开xcode,然后转到“项目”。 在“编辑器”菜单上,点击“添加配置”→“复制“调试”配置”,并将其命名为“ Debug-DEV”。 对“ Release”执行相同的操作,将其设为“ Release-DEV”。 完成后,您将具有以下配置 1.2。 单独的建造方案 您基本上将创建一个新的构建方案,并为它们标记新创建的DEV Build Configs。 在您的xcode上,选择您的方案,然后点击“ New Scheme…”并用“ -DEV”后缀命名(例如,如果您当前的Build […]

创建并发布Cocoa Touch框架。

在本文中,我将演示如何在不共享源代码的情况下创建和分发Cocoa Touch Framework。 Cocoa Touch框架与Cocoa Touch静态库。 创建可可触摸框架。 编写用于创建Cocoa Touch Framework的源代码。 测试框架而不发布 创建Pod规范文件。 验证.podspec文件。 发布Cocoa Touch Framework窗格。 发布后的测试框架。 答:静态库是已编译源文件的集合,这些源文件随后直接链接到应用程序的二进制文件中。 也就是说,它成为您应用程序二进制文件的一部分。 框架是一个独立的实体,其中包含一个二进制文件,该二进制文件包含已编译的代码(以及所有相关资源),而其本身就是一个独立的单元。 B.从iOS 8开始支持Cocoa Touch框架。 如果需要在iOS 8之前支持iOS版本,则应考虑使用Cocoa Touch静态库并在Objective-C中编写代码。 C. Cocoa Touch静态库不支持Swift。 因此,如果您决定使用Cocoa Touch静态库,则需要使用Objective-C。 D.与静态库相比,框架在项目中进行设置所需的手动工作更少。 A.创建可可触摸框架: 文件>新建>项目(命令+ shift + N),然后在iOS选项卡下选择Cocoa Touch Framework。 B.输入您的框架名称和其他详细信息。 根据需要选择语言Swift / ObjectiveC。 C.创建的框架看起来像。 A.创建新文件: 右键单击项目名称文件夹,然后选择“新建文件”。 在iOS标签下选择Swift文件。 输入文件名,然后单击创建按钮。 B.创建公共类: C.通过使用任何iOS模拟器(与通用iOS设备类似)构建项目,为iPhone模拟器生成框架。 D.在Finder中显示框架。 A.为框架创建演示项目: 要创建演示项目,请依次选择文件>新建>项目(命令+ shift + […]

如何与迦太基共享框架

迦太基是可可应用程序的另一个依赖项管理器。 与Cocoapods不同,Carthage仅使用xcodebuild工具下载并构建依赖项,而无需修改当前项目文件或当前Xcode构建设置,此外,Carthage是非中心工具,可以减少维护工作并避免任何中心故障。 让您的框架支持Carthage是一个好主意,让我们开始吧。 首先,选择目标→构建设置→确保您的产品名称和产品模块名称与框架名称相同。 其次,选择您的目标Click Manager方案→确保在项目中选中了共享复选框。 第三,打开终端CD到您的framework文件夹,检查路径是否正确并构建carthage,如果没有任何错误,您可以像通常一样通过Carthage安装框架。 $迦太基构建-不跳过当前 您可能想知道如何与Cocoapods共享框架: https://medium.com/codebbkaf/lets-sharing-framework-with-cocoapods-e15d18b18967

Swift框架中的Google Analytics(分析)

我的目标是创建一个私有的Cocoapods,将Google Analytics(分析)包装起来供团队使用。 这是我如何制作的演示。 您可以在下面看到我的项目。 ji3g4kami / GAReporter Google Analytics(分析)包装。 通过在GitHub上创建一个帐户为ji3g4kami / GAReporter开发做出贡献。 github.com 不使用依赖 最初我想在我的GAReporter.podspec文件中使用s.dependency = ‘GoogleAnalytics’ 。 第一个障碍是桥接标头在iOS项目中有效,但在框架中无效。 但是,在pod install之后,无法使用上面链接中提供的module.modulemap的解决方案。 在参考了Stanwood_Analytics_iOS和Challenges构建一个Swift框架(C ++,Objective C和Swift)之后,我得到了我的解决方案:直接将Google Analytics(分析)添加到Objective-C和Swift的混合框架中。 环境设定 设置Swift框架 添加.gitignore和许可 推送到您的远程存储库 导入Google Analytics(分析) 制作一个伪造的Single View iOS项目,并安装Google Analytics(分析)。 将整个Google Analytics(分析)复制到GAReporter。 添加必需的Google Analytics(分析) Linked Frameworks and Libraries 。 创建自定义module.modulemap 在构建设置中添加Module Map File 。 将“ Defines Module Yes设置为“ Yes 。 […]

在Swift中编写网络层:库创建

在我目前的工作中,我们需要改进代码库,并且从网络层开始。 我们想创建一个开源库,但提出了一个问题:开源库的结构如何? 介绍 去年八月,我开始为一家名为Jumbo的新公司工作(我们仍然有很多职位空缺)来改善他们的移动应用程序,该应用程序在荷兰经常使用。 该应用程序已经并且仍然有一些改进点,因此该团队决定制定一个长期计划以提供新功能,同时改善代码库。 我们要解决的第一件事是网络层,因为该应用程序没有一个:每个UIViewController当前都在扩展一个基本控制器,这是唯一负责在子类中配置并管理所有请求的控制器。逻辑(是的,不理想)。 这是我们结构的一个例子: 这种结构没有错,但是它迫使您每次更改基类时都要测试每个控制器,并且由于验证逻辑是集中式的,因此发生的次数很多。 对于我们的库,我们想要一些可扩展,可维护,开源并且最重要的是可测试的东西:这是JNetworkingKit诞生的那天。 在接下来的几周里,我将描述我们创建它所遵循的过程,所进行的讨论以及所做出的决策。 该库不是完美的,但是我们已经使用了几个月,没有出现任何重大问题,并且我们能够扩展它来解决我们面临的问题。 本文将重点介绍库结构的创建。 其他图书馆 我们想要开源,同时拥有模块化的应用程序。 我们花了一些时间潜入著名的图书馆以了解其结构。 通过分析Alamofire,SwiftyJSON和Realm,我们看到了有关文件夹结构的一些相似之处: 包含源代码的文件夹 文档文件夹 包含示例的文件夹 所有其他文件都与外部服务,CD / CI相关,或者是支持文件。 有时文件夹结构变得很大,以至于很难理解在哪里找到您需要的东西:我们不愿意将所有内容都显示在根文件夹中,因为它可能会变得一团糟(Alamofire那里有26个文件/文件夹),所以我们决定采用我们自己的结构。 JNetworkingKit结构 我们决定弄清楚文件夹包含的内容,因此我们要做的第一件事是在根级别仅创建2个文件夹: JNetworkingKit ,包含库本身 DemoApp ,包含一个用于测试库的演示应用程序(作为开发容器导入) 如果我要求您猜测这些文件夹中的内容,我相信您可以使用名称😉进行猜测。 我们开始将源代码添加到JNetworkingKit文件夹中,并在DemoApp中创建了一个演示应用程序,但是我们开始遇到一些问题。 主文件夹 我们很快就知道保持结构整洁很困难:您需要确定一个许可证 ,为用户添加一个自述文件以及.gitignore文件,以避免提交不必要的事情。 您是否想要CD / CI? 您需要一个文件。 您需要支持Cocopoads吗? 您需要另一个文件。 迦太基和Swift包管理器又如何呢? 将资源划分为多个子文件夹是保持所有内容整洁的唯一方法。 演示应用 由于我们想将该应用程序用作外部Pod,因此我们创建了一个演示应用程序,将其导入为开发 Pod。 我真的建议您做同样的事情:在创建应用程序时,您不必考虑访问修饰符,因为默认情况下所有内容都是internal的,这意味着您可以默认使用项目的每个组件。 创建库时,您只能访问public组件和变量,但是我可以保证您会忘记其中的一些组件,尤其是如果您是根据已在项目中使用的代码创建库的。 创建一个导入库的演示应用程序可以帮助您解决问题:您可以测试代码并直接对其进行修改✌🏻。 你猜怎么了? 发布库后,我们还注意到public关键字缺少some的问题。 子文件夹 子文件夹没有什么特别的:随时创建自己的结构。 我只建议您在库中只有几个文件夹: JNetworkingKit / […]

与Cocoapods共享框架

完成框架后,您可能希望与Cocoapods共享它,以便每个人都可以轻松安装您的框架。 您的框架可能包含图像,gif或某些捆绑文件,本教程将显示如何通过pod.spec将资源包括到Cocoapods中。 顺便说一句,处理Cocoapods可能涉及一些基本的终端命令,如果您不熟悉终端,我建议您去找一些有关它的教程,因为在本教程中,我将不做详细解释。 在本教程中,我们将从头开始,创建一个GitHub存储库并编写一个名为SAProgressHUB的框架,最后,与Cocoapods共享它。 首先,让我们创建一个名称为SAProgressHUB的GitHub存储库。 不要忘记创建许可证。 现在,只需git将此存储库克隆到本地文件夹即可。 $ cd〜/ Documents / Hank_Private / $ git clone git@github.com:bbkaf / SAProgressHUB.git //下载成功后$ cd SAProgressHUB / $ ls -al 我们将创建.gitignore。 只需使用vim创建.gitignore和过去的gitognore https://github.com/github/gitignore/blob/master/Swift.gitignore $ vim .gitignore $ git add .gitignore $ git commit -m“添加.gitignore” $ git push 好的,现在让我们启动Xcode来创建我们的框架。 文件新项目选择“ Cocoa Touch Framework”。 使用GitHub存储库的名称来命名项目,使用不同的名称可能会给您带来混乱,我认为您不喜欢这样做。 现在让我们检查框架路径并进行提交,然后将其推送到GitHub $ ls -al $ git […]

CocoaPods 1.7.0将引入增量Pod安装

正如我在上一篇有关cocoapods-binary的文章中所解释的那样,CocoaPods设计中效率最低的事情之一是,第一次或在清理构建文件夹后,需要花费大量时间来构建项目。 根据CocoaPods信息库中描述的问题#8253和#8319,在即将发布的1.7.0版本中,情况将有所变化。 什么是增量Pod安装? 它是一个新系统,旨在将整体式Pods.xcodeproj项目分为许多不同的子项目,每个子项目一个。 关键是pod install命令将仅从更新的pod install重新生成子项目,但是从现在起不会重新生成未更新或更改的子项目。 是的,这是CocoaPods设计中非常重要的变化。 但是请不要惊慌,默认情况下它将不会处于活动状态。 它对您有什么好处? 如果您的项目有大量的依赖项,那么pod install命令的执行性能应该会大大提高。 此外,执行完后无需再次构建所有依赖项。 但是,这个新系统无法解决的事实是,如果我们清理构建文件夹,我们将需要重新构建所有内容。 为了避免这种情况,我们仍然需要使用cocoapods-binary插件。 它会破坏一切吗? 如果您定期使用Podfile,则理论上的答案是“否”。 但是,安装后挂钩可能需要稍作更新才能使用新的generated_projects属性。 您需要修改什么才能开始使用新系统? 要使用新系统,您需要在Podfile中使用cremental_installation和generate_multiple_pod_projects指令。 默认情况下不会使用。 生成的Podfile将如下所示: 平台:ios,’…’ 安装! ‘cocoapods’, generate_multiple_pod_projects:是的, 增量安装:true 目标’MultiXcodeProject’做 吊舱’…’ … 结束 … 您如何开始准备呢? 最好的办法是下载即将发布的1.7.0版本的最新Beta,并使用您自己的项目对其进行测试,以检查哪些中断以及需要进行哪些修改才能使其再次正常运行。 为此,请使用命令gem install cocoapods –pre 。 但是,请记住,它仍然是beta版本,发布最终源代码之前,情况可能会发生变化。 如果该功能在许多项目中引起重大问题,则甚至可以将其删除。 如果您在早期测试中发现错误,则最好在CocoaPods存储库中提交错误,因为这是一个重大更改。 在下面的评论中分享您的初体验。

CocoaPods插件开发入门

2013年发布的CocoaPods插件成为功能强大且优雅的工具,可通过有用的调整和命令来扩展CocoaPods。 我们已经构建了一个简单的CocoaPods插件,该插件可在团队成员之间同步git hook,并希望分享我们的开发经验,以便您可以根据自己的需要制作一个。 CocoaPods插件是Ruby gem,您需要安装Ruby和CocoaPods才能开始开发插件。 要开始开发新插件,您还需要通过运行以下命令安装cocoapods-plugins gem: $ gem install cocoapods-插件 为了演示和调试,让我们使用git仓库创建一个新的Xcode项目: Xcode>文件>新建>项目>单视图应用程序,不要忘了选中“ 创建git存储库”或通过运行以下命令手动创建它: $ git init 现在我们可以将Pod添加到我们的项目中: $ pod init 或使用我们制作的演示项目来开发cocoapods-githooks插件。 现在是时候通过运行来创建我们的新插件了 $ pod插件创建了githooks 在本教程中,我们使用与插件相同的名称。 除非您将无法发布具有相同名称的插件,否则不会有任何区别。 此命令为CocoaPods插件创建样板。 .gemspec文件是我们插件的主要配置文件。 所有spec字段都是自描述的(您可以在此处查看我们插件的gemspec),但是我想指出一件事: 默认情况下, spec.files引用git存储库索引和工作树中的所有文件。 但是,如果您尝试在git中没有文件的情况下构建gem,则将得到一个空的.gem文件,没有警告或错误。 我的建议是将spec.files的值设置为Dir [‘lib / ** / *’] ,它将引用lib目录中的所有文件。 将spec.files行替换为 spec.files = Dir [‘lib / ** / *’] Gemfile包含执行关联所需的所有gem依赖项 Ruby代码。 有关更多信息,请查看Bundler文档。 Rakefile包含测试规范的参考, spec文件夹包含测试规范。 有关Rake的更多信息,请访问Rake官方仓库。 […]

使用Xcode 10通过3个简单的步骤将cocoapods库添加到游乐场

打开Xcode并创建一个新的Cocoa Touch框架或Cocoa Touch静态库。 我们称之为: MyFrameworkProject 为此,您需要使用要在Playground中测试的库创建Podfile,例如在此处Alamofire: 来源’https://github.com/CocoaPods/Specs.git’ use_frameworks! 目标’MyFrameworkProject’做 pod’Alamofire’,’〜> 4.7′ 结束 然后运行: 吊舱安装 打开使用cocoapods创建的工作区并创建一个新的游乐场。 要白蚁,请在工作区中添加游乐场。 现在,您可以使用新创建的游乐场内的第三方库(此处为Alamofire)。 导入 UIKit 导入 Alamofire var str =“你好,操场” 您可以在这里找到代码:https://github.com/barrault01/cocoapods_insideplay_ground

如何将现有的本机应用程序集成到React-Native SDK

为什么写这篇文章? 本文为您的iOS应用程序与React-Native SDK集成提供了非常基础且足够详尽的步骤。 如果按照上述所有步骤进行操作,那么到本文结尾,您将准备好完全集成的React-Native-iOS应用程序。 假定观众 假定您是一名程序员,并且具有为iOS,Android和Web平台中的任何一种构建应用程序的经验。 我希望您将macOS升级到Mojave(版本10.14.1),以使将来的开发更加顺畅。 它着重于使本地应用程序在react-native SDK中运行所需的基本更改。 快速了解React-Native项目的背景 首先让我快速介绍一下为什么我们非常需要这种集成。 我们在nearbuy.com上试图找出哪种UI / UX设计和功能最适合通过Web,M-Web(PWA),iOS和Android等各种平台访问我们产品的客户。 因此,我们开始在Web应用程序和PWA的各个页面上进行实验,这是因为通过部署时间的灵活性和快速向所有可能的最终用户进行更新的实验变得容易。 我们认为通过PWA进行的流量可以充分代表完整的移动流量的行为,即m-web,iOS和android的结合,但事实证明这还不够好,而通过本机应用进行的实验会浪费大量时间和资源因为本地更新涉及许多耗时的步骤,所以它是组织的一部分。 然后我们想到了将现有的本机应用程序集成到React-Native SDK中的想法。 此设置可帮助我们在需要时通过任何数量的动态应用程序更新/实验来吸引最终用户。 缩略语使用 RN:React Native PWA:渐进式Web应用程序 移动网络:移动网络 cli:命令行界面 RN包装器/ RN SDK:RN的“ Hello World”应用 第1步:设置React-Native SDK包装器 这是此设置最简单的部分。 对于初学者,您必须 按照此处的说明安装节点。 通过运行终端命令sudo npm install -g react-native-cli安装RN sudo npm install -g react-native-cli 。 您可以安装一个名为Watchman的软件包来监视文件系统中的更改,尽管这不是首要任务。 现在要创建RN包装器,请首先转到要保留RN项目代码的文件夹,然后在terminal中运行react-native init 命令。 此安装将花费一些时间,因为它涉及到安装诸如react&react-native之类的库以及所有必需的依赖项。 RN包装器已准备就绪,可以进行进一步的集成,其结构应与下图中的结构完全相同,除了项目的名称。 步骤2:安装cocoapods并进行设置 这可以帮助您安装Xcode。 要在Xcode中运行iOS项目,您需要cocoapods。 […]