Tag: cocoapods

修复了“无法连接到GitHub以更新CocoaPods / Specs规范回购”错误

经过这个令人讨厌的错误的努力之后,发生了: Failed to connect to GitHub to update the CocoaPods/Specs specs repo – Please check if you are offline, or that GitHub is down ,我终于可以通过以下步骤解决此问题: 使用Homebrew在Mac上升级系统的红宝石 $ brew安装红宝石 2.用新的红宝石重新安装椰子 $ sudo gem install cocoapods [-v 1.2.0] 在本例中,使用1.2.0版来防止错误处理与’!ProtoCompiler’相关的错误 3.更新有关CocoaPods主回购的信息(可能没有必要) $荚设置 然后我们都完成了🙂 参考文献: 错误提示“无法连接到GitHub”,应打印完整错误·问题#7447·… 我已阅读并了解* CONTRIBUTING准则,并已尽最大努力遵循。 报告(注:此… github.com

Cordova-plugin-cocoapods-support的Cordova编译问题修补程序

cordova-plugin-cocoapods-support是一个Cordova / PhoneGap插件,它允许您在XML文件中为iOS定义插件或项目CocoaPods依赖项。 但是,当与cordova-ios@4.5.2或更高版本一起使用时,Cordova编译命令将失败。 本文将指出导致此问题的更改以及使iOS构建再次通过的潜在解决方案。 当Cordova发布cordova-ios@4.5.2时,引入了新变量location ,其中包含了必要的信息,以供平台构建器获取捆绑包标识符。 新变量的属性之一是pbxproj文件的路径。 该文件位于xcodeproj目录中。 在Cordova准备项目之后,将执行cordova-plugin-cocoapods-support插件的after_prepare挂钩脚本,并对平台构建脚本进行修改。 执行的修改之一是非常松散的查找,并将xcodeproj所有实例替换为xcworkspace 。 由于意外更改,生成器在尝试从xcworkspace目录解析pbxproj文件时失败,因为找不到文件。 该问题只能通过cordova compile命令看到,而不能通过cordova build命令看到。 这是因为build命令执行所有构建步骤,并从缓存中维护包标识符信息,并且不需要解析pbxproj文件。 此解决方案无需多说。 如果您是插件开发人员,并且有可能,那么删除插件依赖项并将Cordova的本机实现用于CocoaPods支持将是理想的选择。 这是有关如何使用Cordova的实现加载OpenSSL Pod文件的示例。 <framework src=" OpenSSL ” type=” podspec ” spec=” 1.0.210 ” /> 您可以在此处找到更多详细信息。 如果您不是插件开发人员,并且不能删除插件依赖项,则可以创建自己的挂钩脚本来还原重大更改。 首先,我们将需要创建钩子脚本,最后将其添加到项目的config.xml中,以便使用它。 创建脚本 让我们创建一个名为beforeCompileCocoapodsHotfix.js的新文件,并将其添加到hooks文件夹中。 路径应类似于以下/hooks/beforeCompileCocoapodsHotfix.js 。 接下来,我们将添加脚本内容。 该脚本将仅显式搜索重大更改并还原。 这不会还原插件的所有更改。 最后,我们将向项目的config.xml添加对新钩子脚本的引用,以在编译前执行。 由于这是一个iOS依赖项,因此我们将其添加到iOS平台声明中。 <platform name =“ ios ”> <hook type =“ before_compile ” src […]

使用Cocoapods创建和分发私人图书馆

大家好, 在这篇文章中,我将向您展示如何使用Cocoapods开发和分发内部私有代码库。 顺便说一下,Cocoapods是管理项目中第三方依赖项的绝佳工具。 它不仅提供了一种轻松集成这些依赖项的方法,而且还允许您创建自己的依赖项并进行管理。 最重要的是,您可以简化组织内部的代码共享。 这被称为私人吊舱,并在可可足类网站上进行了详细描述。 在本博客中,我将向您展示一种创建私有pod的更简单方法,对于初学者来说也更容易理解。 创建私有容器时,您应牢记的最重要的一点是,它需要创建两个存储库。 一个存储库用于存储您要共享的代码或类(我们称为“ Pod”),另一个存储库是“ Podspec”存储库,其中包含有关该Pod的所有信息。 需要为您创建的所有Pod创建一次Podspec存储库,但Pod存储库是您要重用并与团队共享的每个代码分支的单独存储库。 话虽如此,我们需要执行的第一步是创建这些存储库。 让我们跳到它。 第1步:在Github上创建Podspec存储库 首先,您需要创建私有的“ Podspec”存储库。 为此,您需要首先在Github中创建一个存储库。 为此: 前往Github 创建新的仓库 选择专用选项并命名您的规范存储库。 在这种情况下,我们在Github中创建了一个名为folio3-specs的存储库。) 现在运行以下命令 回声“#folio3-specs” >> README.md git初始化 git添加README.md git commit -m“首次提交” git remote add origin https://github.com/shahabejaz/folio3-specs.git git push -u原始主机 上面创建的存储库除了Readme.md文件外,不保存任何其他内容 。 我们稍后将在创建第一个吊舱时解决此问题。 步骤2:将您的私有存储库添加到CocoaPods安装中 在Github中创建规范存储库后,只需在终端中运行以下命令即可将私有存储库添加到cocoapods安装中。 吊舱回购添加[REPO_NAME] [SOURCE_URL] 在上面的代码中, REPO_NAME是您将用来引用“ PodSpec”存储库的名称,SOURCE_URL是您刚刚创建的存储库的Github URL。 在这种情况下,我们的存储库名称是folio3-specs,源URL是该存储库的Github URL。 如果一切正常,那么您应该可以通过运行以下命令来链接您的规范存储库。 cd〜/ […]

选择第三方库的简短指南(入门)

开源库对我们开发人员来说是个福音,但这不是什么大新闻。 如果选择得当,它们可以节省我们的时间和精力。 我们不必太在意实现细节,维护和功能。 取而代之的是,我们为我们提供了一个简单易用的API,该API可以使我们轻松地到达所需位置。 我不必自己编写QR码扫描仪,而且我敢肯定,再也不会写网络库了。 但是,在为项目选择库时有许多注意事项。 选择维护不善的设备迟早会适得其反。 现在,假设您要实现一个库,并且发现可以根据需要进行自定义的库。 让我们转到Github并导航到您选择的库。 选择开放源代码库时,需要注意以下几点。 该库是否支持依赖项管理器? 依赖管理器使我们的工作变得更加轻松,我什至不记得编码在他们出现之前是怎样的。 在iO上,我最喜欢的是Cocoapods,但迦太基也获得了极大的关注。 不要忘了苹果自己的Swift Package Manager,这肯定会在不久的将来成为现实。 在这里我不会详细介绍它们的工作原理,但是您应该使用它们,相信我。 它们为您处理了很多难题,例如将依赖项集成到您的应用程序中,使它们易于更新,仅举几例。 因此,请确保支持您选择的依赖项管理器。 什么时候是对该仓库的最后一次提交? 一段时间未更新的回购可能不是您的首选。 通常,超过6个月的提交使我感到怀疑,超过1年或更多年的提交实际上使该回购失去资格。 如今,对于iOS来说,这一点尤为重要,因为Swift的发展非常迅速,并且会定期对API进行重大更改。 可能是该库的维护不完善,您需要根据自己的需要来保持它的最新状态。 最后,您可能会更好地寻找替代方案或自己编写替代方案。 话虽如此:除了主服务器,最好检查仓库中的其他分支。 许多开发人员准备将其库与单独分支上即将推出的SDK版本兼容。 一旦发布了新版本,它们将被合并,并且在此之前可以在您的项目中明确使用。 图书馆有几颗星? 如果回购中有大量的星星(和叉子),则通常可以很好地指示其背后有一个庞大的社区。 很难说出“多少”是多少,但现在我要说大约600+。 让我强调一点,我并不是说星数较少的图书馆可能不是最合适的! 我要说的是,数百颗甚至数千颗恒星几乎可以保证这个lib发挥出色,并且在那里有人在乎。 快速发现错误并通过修复做出贡献的人。 有兴趣在自己的项目中不断更新该库的人们。 因此,根据经验:星星越多,您的决定就越有前瞻性。 图书馆有几期? Github问题追踪器是一件方便的事情。 它使您对所有者和社区对图书馆的贡献有一个很好的了解。 让我们看看Alamofire的问题跟踪器,它是Swift中优雅的网络库。 问题通常以三种形式出现:错误,问题或功能请求。 让我们专注于错误和问题: 有一长串未解决的错误 ,其中一些可以追溯到几个月甚至几年? 查看详细信息视图:这些错误对您来说是否有效? 项目成员有什么回应吗? 如果没有,我将决定不使用该库。 是否有很多问题标记为问题 ? 即使它们似乎是关于非常基本的东西? 这可能暗示此lib没有足够的文档记录或使用起来很复杂。 但是,如果快速而又经常地回答问题,那么在仅解决文档问题就无法解决问题时,也可以寻求帮助。 这也导致了下一个问题: 图书馆是否有充分的文献资料? 自述文件是每个Github存储库的登陆页面,第一印象。 […]

名为“ Objective-C和带有CocoaPods的Swift”的沼泽

名为“ Objective-C和带有CocoaPods的Swift”的沼泽 我最近得到一份合同,内容是客户的应用程序完全由Objective-C编写。 好吧……您知道这个故事……许多应用程序由于缺少Swift的游戏规则改变程序“ Optional ”而崩溃,而且我个人不喜欢Swift中的故事板交互 我决定将这场噩梦变成一个仙境:)…。 不幸的是,该项目已经基于CocoaPods了。首先,由于项目的独立性,我试图将其更改为“ Carthage”,它比Cocoa Pod更好。 我通过“ cocoapods-deintegrate”摆脱了CocoaPods的困扰,它是救生员插件(那里的工作很好的人)……它确实需要简单的步骤…… 然后我在项目上遍历了podfile来找出那里的依赖关系,结果如下: 好吧……大多数真正古老的库都不知道为什么它们仍在呼吸……还有故事的来龙去脉,您可以自己开发该功能,而无需在那里使用任何库…… 有趣的生活开始了,其中一些库没有迦太基版本,我不得不自己将其转换为“迦太基”以及以下剧集..: “迦太基将只构建从您的.xcodeproj共享的Xcode方案。 您可以通过运行carthage build –no-skip-current ,然后检查Carthage / Build文件夹,查看是否所有预期的方案都能成功构建。” 我已经将ACSPinKit和iOS-Slide-Menu更新为“迦太基”,但是紧迫的时间来了,你知道这意味着什么,当你是承包商时…你应该比他们的专职开发人员快得多:) 我决定回到可可豆荚,然后添加我的快速库,没有它们我无法呼吸 然后安装pod …这些术语遇到了“动态框架”,看起来像CocoaPods从“ CocoaPods 0.36 ”中得到支持,这看起来像是个好消息……。我将其添加到podFile的顶部 它开始安装Pod,但是依赖项(FMDB)之一困扰了我的构建。 FMDB是一个有用的库,可以处理应用程序上的SqlLite db,它是用Objective-C编写的,我已经在我的桥接文件“ *****-Bridging-Header.h”中添加了我需要调用的其他文件他们从敏捷的一面: 在这一点上,我真的放弃了,不知道为什么在我的xcode构建阶段中不加入FMDB库。 然后开始运行带有构建设置文件和无步搜索的游戏…。它把我拖到一边说好,我将在Objective C中完成其余的应用程序,但是Swift和RxSwift的悲伤表情促使我继续工作这个问题…。 猜猜是什么……光亮了……我对自己说,为什么不遵循迦太基遵循的概念……手动复制文件……但是我没有完全从FMDB复制所有文件,但是文件并不多……。 我已经从FMDB中跟踪了所有需要的文件,并将其复制到了我的Swift文件夹中 然后运行构建以及交叉手指….. 你知道然后休息,像传奇一样去散步:) 无论如何,希望这对那些必须走同样的路并且拥有一个与Objective C和Swift结合使用的应用程序的人有所帮助。

Swift快照测试简介

因此,我正在制作一个新的应用程序,我很乐意在进行过程中分享自己的所有经验,以便保持自己的积极性并分享一些知识,希望您可以自己使用应用。 为什么要测试UI? 很简单,您要确保每次触摸任何UI元素时,一切都保持原样,这种集成测试还可以帮助您实现像素完美的视图并通过设计使设计师满意他们甚至在您的拉取请求中也可以看到的参考图像 。 怎么样 我将尝试描述如何使用坚如磐石的facebook lib`FBSnapshotTestCase`测试所有UI组件和视图。 正如lib参考资料所述: “快照测试用例”采用已配置的UIView或CALayer并使用renderInContext:方法获取其内容的图像快照。 它将快照与存储在源代码存储库中的“参考图像”进行比较,如果两个图像不匹配,则测试失败。 为了安装库,我们将使用Cocoapods安装依赖项 将以下行添加到您的Podfile中 之后,使用终端在项目根文件夹上进行Pod安装 ,然后打开生成的工作区以配置应用程序架构,如下所示 之后,您可以进入运行方案并将此环境变量添加到项目中 FB_REFERENCE_IMAGE_DIR = $(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages IMAGE_DIFF_DIR = $(SOURCE_ROOT)/$(PROJECT_NAME)Tests/FailureDiffs 看起来像这样 完成所有这些设置之后,我们将实际构成测试部分,您需要记住,我们可以测试任何UIView或CALayer因此,要检查的任何视图在添加新的测试用例 (包括UIViewController)时都比较容易 要测试什么? 就像我说过的,您可以测试要从UIView或CALayer继承的任何内容之前, 所以在这种情况下,我将测试设计师设计的新按钮组件 在这种情况下,我们要测试每个按钮的状态,以便当我们意外更新或更改任何GenericButton代码时,如果出现错误,则测试将失败 因此,让我们开始添加一个新的单元测试用例 然后更新代码,以便我们可以开始使用FBSnapshotTestCase。 为了使用该库,我们需要导入FBSnapshotTestCase ,然后将XCTestCase更改为FBSnapshotTestCase ,更改后将如下所示: 首先,让我尝试向您解释这个概念,以便您了解其工作原理。 为了进行快照测试,我们应该首先拍摄当前视图组件,此后,库将存储参考图像,以便以后每次运行此测试套件时,可以将其与新更改进行比较。 为了拍摄第一个快照,我们应该添加一些测试用例,然后在设置方法中将recordMode变量激活为true 按下测试操作后,您将看到所有UI测试失败的原因,请不要担心这是该过程的一部分,因为您会看到一条消息,告诉您现在所有参考图像都已保存,您可以打开recordMode为false并再次运行测试 如果要验证是否创建了参考图像,则可以检查测试文件夹,如果一切正常,则应看到一些具有实际组件状态的图像,在这种情况下,所有按钮状态均作为设计标记 但是我们还没有完成,我们想检查一下它是否有效,因此每当发生任何变化时,测试目标上都会出现红灯,因此我们应该从设置中删除recordMode行,然后再次击中测试目标 从现在开始,每次更改GenericButton组件中的某些会影响设计状态的警告时,都会警告您并且测试将失败,此技术可用于视图控制器,因此根据视图的状态,您可以查看元素是否到位一切正常,您还可以与设计人员共享参考图像,以便他们检查像素是否完美。 尾注 还有其他方法可以通过使用诸如KIF或Google的EarlGrey之类的库来测试UI元素,但我认为这种快照测试更易于维护,其中一个FBSnapshotTestCase可能与许多其他框架相同。 如果您有任何疑问或疑问,可以通过Twitter与我联系,我会尽力帮助您。 这是我的第一篇英文书面文章,请原谅我的错字🤓

如何将Ad Exchange实施到iOS应用中

因此,您想在闪亮的新应用中实施广告吗? 或者,也许您正在公司中的某个项目上工作,而该项目中需要广告? 无论如何,最好的方法(IMHO)是使用Google广告服务(此帖子将处理Ad Exchange,但如果您将目标定位为Firebase / AdSense,则过程基本相同)。 尽管Ad Exchange和AdSense看起来是一样的东西(至少对于我来说,仅是从服务的技术方面来看这方面的开发人员而言),但是在这两种服务上还是有很大的不同。 Ad Exchange更像是大型企业的高级选项,它提供了更多高级功能,例如匿名性,设置首选交易的能力,比AdSense提供更多的过滤和屏蔽选项,等等。 在本文中,我们将假设您(作为读者)对iOS开发领域有所了解,并且您熟悉诸如可可豆荚之类的术语。 此外,我们还将假设您已经配置了Ad Exchange帐户,已经配置并设置了广告单元ID。 让我们从横幅广告开始(因为我认为它们是最好的广告)。 首先,我们需要安装Google Mobile Ads SDK,首选的安装方法是通过可可豆荚安装它们,也可以通过下载SDK手动进行。 之后,将其复制到您的项目中。 如果您选择使用可可豆荚 ,请添加以下行: pod’Google-Mobile-Ads-SDK’ 到您的podfile,然后通过运行“ pod install”安装SDK。 现在,您的SDK已安装并准备就绪,成为有趣的部分。 首先,我们需要确定横幅广告的尺寸。 几乎没有可供选择的选项: 我们将选择第一个选项,即320×50尺寸的广告,它完全可以满足我们的需求。 现在要做的第一件事是创建广告视图,最简单的方法是通过故事板。 因此,打开情节提要,在屏幕底部创建一个尺寸为320×50(或您选择的任意尺寸)的小视图,对其进行约束,然后在身份检查器中为其指定GADBannerView的类名。 现在是显而易见的部分,从该视图到ViewController创建IBOutlet,并将其命名为“ bannerAdView”。 最后,添加用于配置和加载广告的代码。 配置非常简单明了。 但首先,请确保将SDK导入到您的视图控制器中,如下所示: 导入 GoogleMobileAds 现在创建请求,但请确保使用测试广告单元ID,或指定一个测试设备(在我们的示例中,这是模拟器): 让req = GADRequest() req.testDevices = [kGADSimulatorID] 现在,将一些信息添加到bannerAdview中,例如adSize,根视图控制器和广告单元ID: 自我 .bannerAdView.adSize = kGADAdSizeBanner 自我 .bannerAdView.rootViewController = 自我 self […]

可可豆:依赖管理变得更容易

您需要了解的所有有关豆荚的信息。 什么是CocoaPods “ CocoaPods是Swift / Objective-C项目的依赖项管理器。 它具有成千上万的库,可以帮助您优雅地扩展项目。”通过http://cocoapods.org 本质上,它可以帮助您将第三方库,框架整合到您的产品中,而不必担心如何设置它们和配置项目,这有时可能会很麻烦。 为什么要装豆荚? 为什么不Git? •由于库是第三方的,因此每次有新版本时,您都必须下载并将它们复制到您的项目中吗? 可以说,您的项目中有10个库或框架,现在想象一下您将花费多长时间检查其中是否有任何要更新的新版本? 最糟糕的是,如果某些操作不起作用,您需要还原到以前的版本吗? 这确实需要时间,而且很麻烦,使用CocoaPods只需键入pod update并更新具有可用的较新版本的Pod。 •现在是否要使用某个特定库的v1.1? 快速浏览Git提交历史以找出所需的那一个,这有多容易? 使用CocoaPods,您只需说出Pod’AFrameworkLib’,’1.1′ •每个库都需要使用一组特定的配置来设置您的项目,以使其正常工作,并为10个左右的库完成该工作,然后解决冲突本身就是痛苦。 使用CocoaPods,它会自动得到照顾。 •最后但并非最不重要的一点是,您必须包括所有用于向该库的原始开发者提供功劳的第三方库的许可证。 想像一下要复制10个许可文档并确保它们是最新的? CocoaPod在您的项目中自动创建一个确认文件,您可以在其中适当地添加一个确认文件。 通过 http://stackoverflow.com/questions/22261124/what-is-cocoapods 吊舱如何工作? 依赖关系列在pod文件中。 当触发pod update / install命令时,列出的pod被安装,并且CocoaPods创建一个新的项目文件,即.xcworkspace文件,其中列出了所有pod。 这使它更易于使用,但也减少了错误证明。 如何安装吊舱? 吊舱的安装非常简单,这使吊舱如此流行。 您可以通过4个简单的步骤安装Pod。 安装gems:从终端启动[sudo gem install pods] ,将安装gems。 制作pod文件:使用终端在项目目录中创建一个名为Podfile的文本文件,或者使用cocoa pods应用程序并将Pod添加到您的应用程序中。 搜索要添加的广告连播:在cocoapods.org上搜索要添加的广告连播的名称和版本 在Pod文件中添加Pod和版本:您需要提及在刚创建的Pod文件中添加Pod的依赖性。 可以使用任何编辑器完成此操作(最好使用可可豆荚应用程序 单击安装:触发命令[pod install]或单击可可豆荚应用程序中的安装按钮,将安装提到的依赖项。 做完了 刚开始使用可可豆荚而不是xcodeproj文件创建的工作区。 提及的依赖项已添加到您的项目中。 如何删除已安装的吊舱? 早些时候,从Xcode项目中删除已安装的Pod很麻烦。 仅删除pod文件和目录是不够的。 您需要从构建阶段中删除Pod资源,嵌入式Pod框架和其他一些东西。 但是可可豆的应用使这项工作变得非常容易。 […]

使用CookieCutter Swift创建iOS框架

在iOS中创建框架对我来说并不是什么新鲜事物。 在我的整个职业生涯中,我有机会建立了其中的几个。 您想要创建框架的原因有很多: 创建可以在项目之间重复使用的抽象。 与社区分享您建立的东西。 将项目拆分为模块。 … 直到今天,每当我不得不创建一个iOS框架时,我都会发现自己重复了相同的模板: pod lib创建* 是的 那是赢的正确的cocoapods! 几天前,我收到了有关CookieCutter Swift的朋友建议。 用于创建iOS框架的模板,该模板不仅允许我的项目支持Cocoapods,而且还支持Carthage和Swift Package Manager。 在本文中,我将展示如何使用CookieCutter创建iOS框架以及这样做的好处。 我将在本文中创建的框架可以在这里找到。 检查它是自述文件。 几乎所有内容都来自CookieCutter模板,太棒了! 从头开始真正的生产自述文件,太棒了! thiagolioy / Swifixture Swifixture –用于加载Json文件并帮助进行更好测试的Swift库。 github.com 聊够了..给我看看代码! 首先,请确保每个人都在同一页面上,这意味着: 酿造安装迦太基 酿造安装cookiecutter cookiecutter https://github.com/cookiecutter-swift/FrameworkTemplate *对于将来的运行,您可以将命令缩短为cookiecutter FrameworkTemplate 。 但是,如果要使用最新的模板,则仍应运行上面的完整命令。 运行命令后,您将得到如下所示的文件夹结构: 有很多文件夹和文件: 购物车文件 Podspec PackageSwift 自述文件 Xcode项目 源/和测试/目录 除其他事项外 .. 很棒的事情是,如果您像我一样来自“ pod lib create”世界,能够使用Carthage导入Nimble和Quick是一个很大的增强,而不是测试中更多的语法和完成问题! 使用子规范配置podspec的方式也值得一提。 这种方法将使很多豆荚受益匪浅。 许多图书馆都做到了卓越,例如Moya。 […]

创建自己的CocoaPod库

CocoaPods是本机iOS / macOS项目的依赖项管理器。 它具有成千上万个库,可以通过共享而不是共享项目的整个库集,而仅共享包含有关依赖项的所有信息的单个Pod文件,来帮助您优雅地扩展项目。 最终,其目标是通过创建一个更加集中的生态系统来提高第三方开源库的可发现性和参与度。 不仅如此,您还可以在私有存储库中创建pod,因此没有人可以访问它,并且您将获得CocoaPods的所有好处。 首先,让我们看一下cocoapods到底是什么 : 在这里,您可以看到cocoapods将所有依赖项存储在其他位置(例如GitHub上的代码,gitlab等),以及关于cocoapods仓库的pod信息。 因此,对于创建Pod,您应该将代码存储在某个仓库(公共或私有,您可以选择)上,并将Pod信息提供给cocoapods。 Pod信息实际上是一个.podspec文件,其中包含有关库的所有信息(请参见下文)。 因此,podspec基本上如下所示: Pod :: Spec.new do | s | s.name =’MyLibrary’ s.version =’0.1.0′ s.summary =’真棒’ s.description = <<-DESC 帮助您飞行。 数据中心 s.homepage =’http://example.com’ s.screenshots =’www.example.com/screenshots_1′ s.license = {:type =>’MIT’,:file =>’LICENSE’} s.author = {‘Maxud’=>’nuves101@gmail.com’} s.source = {:git =>’http://github.com’,:tag => s.version.to_s} s.social_media_url =’https://twitter.com/ ‘ s.ios.deployment_target =’7.0′ s.platform =:ios,’7.0’ […]