Tag: cocoapods

Swift的游乐场驱动开发

作为移动开发人员,我们的使命是为最终用户提供最佳的用户体验,通过专用的应用程序使他们的生活更有趣,更轻松。 任务之一是确保用户看到的用户界面外观良好且正确。 大多数时候,我们可以说应用程序是数据的美化手段。 我们通常从后端获取JSON数据,将其解析为模型,然后使用UIView (主要是UITableView或UICollectionView 。 对于iOS,我们需要根据设计不断调整用户界面,使其适合小型手持设备。 该过程涉及我们更改代码,编译,等待,检查,然后更改代码等等。…诸如Flawless App之类的工具有助于轻松比较iOS应用程序和Sketch设计的结果。 但是真正的麻烦在于编译部分,这花费了很多时间,而对于Swift来说更糟。 它使我们进行快速迭代的效率降低。 看起来编译器在假装编译时正在秘密开采比特币mining 如果您使用React,您将知道它只是状态UI = f(state). UI表示UI = f(state). 您将获得一些数据,并构建一个UI来表示它。 React具有热重载器和Storybook,这使得执行UI迭代非常快。 您进行了一些更改,然后立即看到结果。 您还将获得每种状态所有可能的UI的完整概述。 您知道在iOS中想要相同的东西! 除了在WWDC 2014中引入Swift之外,苹果还引入了Playground,据说这是“探索Swift编程语言的一种新颖的创新方式”。 一开始我并不十分相信,而且我看到很多抱怨Playground运行缓慢或反应迟钝的抱怨。 但是看到Kickstarter iOS应用程序使用Playground加快了样式和开发过程的速度后,我印象深刻。 因此,我开始在某些应用程序中成功使用它。 它不会像React Native或Injection App一样立即重新渲染,但希望多年来会更好。 或至少它取决于开发社区。 Playground的场景是我们一次只能设置一个屏幕或组件的样式。 这迫使我们仔细考虑依赖关系,因此我可以导入一个特定的屏幕并在Playground中对其进行迭代。 Xcode 9允许在Playground中导入自定义框架,只要该框架与Playground在同一工作空间中即可。 我们可以使用Carthage获取自定义框架并进行构建。 但是,如果我们使用CocoaPods,那么它也是可行的。 如果将Playground添加为嵌套项目,则Playground无法访问同一工作空间或父项目中的代码。 为此,您需要创建一个框架并添加要在Playground中使用的源文件。 我们称之为应用程序框架。 本文的演示是一个使用CocoaPods管理依赖项的iOS项目。 在撰写本文时,它是Xcode 9.3和Swift 4.1。 让我们逐步完成使Playground与使用CocoaPods的项目一起使用的步骤。 还有一些好的做法。 步骤1:添加广告连播 我主要使用CocoaPods管理依赖项。 在某些屏幕中,肯定会涉及到一些吊舱。 因此,要使我们的应用程序框架正常工作,它需要与一些吊舱链接。 创建一个新项目,我们称它为UsingPlayground 。 该应用程序显示某种纸屑颗粒🎊。 […]

如何使用CocoaPods创建您的私人图书馆(Pod)

凉!! 现在尝试构建您的项目,并检查是否有任何与swift 3相关的问题,然后转到下一步。 检查Podspec文件 在将Podspec文件提交到我们的私有存储库之前,我们可以通过运行以下命令从项目目录进行测试: 将摘要更改为: 接下来,浏览至Github或Bitbucket并为我们的库创建一个私有存储库,然后跳过给定的URL。 初始项目设置的下一步是提交更改并将所有内容推送到您创建的GitHub或Bitbucket远程存储库。 以下步骤可以解决问题: 假设一切顺利,我们可以将更改最终提交到存储库,创建标记并将其推送到存储库。 如果一切顺利,您现在已经准备好一个由Git源代码控制的Snorlax库项目。 现在,您可以为该项目创建CocoaPod podspec,并继续开发支持CocoaPod的库项目。 设置规格仓库 即将进行的所有设置都将获得回报,因为您将拥有一个既定的,可重复的过程,可以为iOS应用开发设置内部库。 根据需要添加更多的私有共享库变得很简单。 登录到Github或Bitbucket并创建一个名为PrivateTrunk的新私有存储库来管理所有私有库。 接下来,使用新创建的URL运行以下命令: 部署库 最后一步是将Podspec推送到专用中继服务。 您可以通过从命令行执行以下命令来执行此操作: 使用图书馆 就是这样,现在您应该可以通过编辑podfile,在顶部添加私人仓库的源代码和标准cocoapods 源文件的方式来安装库。 正常添加库。 摘要 阅读完本教程后,希望您现在了解如何创建自己的私有库。 作为参考,您可以从此处下载完整的Xcode项目 。 与往常一样,给我评论,分享您对本教程的看法,不要忘记关注我以获取更多教程。

创建私人可可荚的初学者指南

重用代码的好处是显而易见的。 对于您构建的每个应用程序,您都可以[可能]重用之前为该应用程序创建的通用代码。 这样可以节省时间,改善程序的功能,并通常使程序更具成本效益。 随着库的增长,为更复杂的应用程序放置框架变得越来越容易,这需要更少的工作。 但是,需要一个适当的过程来维护和更新可重复使用的代码,以便整个团队都可以使用它。 使用可可豆荚可以轻松实现这一点,可可豆荚可以为创建私人豆荚提供支持。 这是实现它的分步指南。 继续前进之前,请确保已在系统上安装了可可豆荚。 [按照此 链接 开始使用系统上的椰壳足纲动物] 我用过bitbucket 这使我们可以创建私有存储库来维护本指南中的代码库。 为了使事情井井有条,我们将首先在bitbucket中创建一个名为POD_BASE的项目,并将所有存储库添加到其中。 这是在bitbucket中创建项目的链接。 在POD_BASE项目内部创建2个私有仓库。 首先,持有podspec [此后称为此POD_SPEC_REPO ] 第二,持有我们希望在整个团队中共享的可重用组件(此后称为POD1_REPO )。 这是在bitbucket中创建回购协议的链接。 注意:以上回购名称是通用名称。 在bitbucket中为本文目的创建的实际存储库的名称为BannerSpec [POD_SPEC_REPO]和BannerPod [POD1_REPO]。 从终端运行以下命令: pod repo add POD_SPEC_REPO [POD_SPEC_REPO_URL] POD_SPEC_REPO是规范回购名称 POD_SPEC_REPO_URL是存储库的位桶URL。 [https://bitbucket.org/ / .git] 您可以运行上面的命令而不必担心当前目录。 但是,在运行上述命令之前导航到spec repo目录,让您跟踪所有已添加的spec repo。 要导航到cocoapods spec repo目录,请运行: cd ~/.cocoapods/repos/ 这是您所有本地podspec存储库所在的地方。 成功添加规格仓库后,您可以通过运行以下命令来对其进行验证: cd SPEC_REPO_NAME / 豆荚皮棉。 〜〜..cocoapods / repos […]

椰子足在我们的发展中实际上做了什么

作为iOS的项目工程师,我们都知道cocoapods,著名的工具可以帮助我们在项目中进行依赖注入…。 首先,感谢可可豆荚的贡献者,感谢他们的分享。所以直到现在,我才意识到如果您在Web开发上花费更多的时间,Ruby是很棒的编程语言,您会喜欢Web框架-Ruby on Rails开发您的网站。您可以使用Ruby进行自动部署,也可以使用Ruby进行项目自动测试……但是今天,我的重点是cocoapods。 为什么在我们的iOS项目中进行依赖注入? 在软件工程中, 依赖项注入是一种技术,通过该技术一个对象可以提供另一个对象的依赖项。 依赖项是可以使用的对象(服务)。 注入是将依赖项传递给将使用它的依赖对象(客户端)。 服务已成为客户端状态的一部分。[1]将服务传递给客户端,而不是允许客户端构建或找到服务,是该模式的基本要求。 由于它的优势,因此我们在开发中总是使用依赖注入。 依赖注入使客户端可以灵活配置。 只有客户的行为是固定的。 客户端可以执行任何支持客户端期望的内部接口的操作。 依赖性注入可用于将系统的配置详细信息外部化为配置文件,从而无需重新编译即可重新配置系统。 可以针对需要组件的不同实现的不同情况编写单独的配置。 这包括但不限于测试。 由于依赖项注入不需要任何代码行为更改,因此可以将其作为重构应用于遗留代码。 结果是客户端变得更加独立,并且可以使用存根或模拟其他未测试对象的模拟对象来进行单独的单元测试。 当使用依赖注入时,这种易于测试通常是第一个注意到的好处。 依赖注入使客户可以删除其需要使用的具体实现的所有知识。 这有助于使客户免受设计变更和缺陷的影响。 它促进可重用性,可测试性和可维护性。[22] 减少应用程序对象中的样板代码,因为初始化或设置依赖项的所有工作均由提供程序组件处理。[22] 依赖注入允许并发或独立开发。 两名开发人员可以独立开发彼此使用的类,而只需要知道类将通过其进行通信的接口即可。 插件通常是由第三方商店开发的,它们甚至从未与创建使用插件的产品的开发人员交谈。 依赖注入减少了类与其依赖之间的耦合。 依赖注入的类型: 1,构造注射 类NSPersistenceStore:NSObject { init(persistenceStoreCoordinator root:NSPersistenceStoreCoordinator ?, configurationName名称:字符串?, 网址url:NSURL ?, 选项:[NSObject:AnyObject]?) varsistenceanceStoreCoordinator:NSPersistenceStoreCoordinator吗? {得到} } 注意: 它确保依赖项始终存在于对象的生命周期中,并且它们在运行时不会更改,这使它更安全……。 2,接口注入 扩展UIViewController { 弱公共var transitionDelegate:UIViewControllerTransitionDelegate吗? 3,方法注入 公共协议NSCoding { 公共基金编码器WithCoder(aDecoder:NSCoder) } use:dependency可以随方法的每个方法或其时间的不同而变化,因此无需在方法范围之外存储对此依赖关系的引用。 […]

在iOS中通过自定义podspec与CocoaPods集成库

今天,我将要集成一个尚不支持CocoaPods的库。 手动执行此操作很麻烦,因为您必须配置xcconfig , framework search path , assets ,而且这些步骤的文档记录也不够充分。 您可以使用自定义podspec进行此操作。 就我而言,我需要安装PinchSDK。 首先,在您的项目文件夹中声明一个PinchSDK.podspec 。 Pod :: Spec.new do | s | s.name =“ PinchSDK” s.version =“ 1.9.14” s.summary =“将捏捏信标发送给捏手samler dessuten旅馆数据。” s.homepage =“ https://bitbucket.org/fluxloop/pinch.installpackage” s.source = {:http =>“ https://bitbucket.org/fluxloop/pinch.installpackage/raw/master/iOS/PinchSDK.zip”} s.authors =’Fluxloop’ s.license = {类型:’MIT’} s.platform =:ios,’8.0′ s.requires_arc = true s.resource =’PinchSDK / Pinch.bundle’ s.vendored_frameworks =’PinchSDK / PinchLibrary.framework’ […]

创建一个iOS CocoaPod

vvvvvvv 本文是本文的旧版本 。 我强烈建议您改为阅读 新文章 。 ^^^^^^^^ 这种创建pod的方式使用了Cocoapods文档中的设置方式,我认为它们的设置方式使添加字体图像和管理文件结构变得异常困难。 现在开始上古历史课: 阅读了7分钟,但应该完整。 如果您的机器上没有Cocoapods,则应通过在终端上输入以下内容进行安装: sudo gem install cocoapods 您也可以使用相同的命令更新Cocoapods。 转到要存储cocoapod的目录。 ( cd )然后运行: pod lib create nameYouWantForYourProject 当它自动生成并正确设置您的广告连播时,它会提示您一些问题: 它应该自动创建并打开一个项目: Cocoapod服务会找到源代码托管在源存储库中(例如,在Github上),这就是它用来定位代码,创建内部版本并允许其他人下载的代码。 让我们为其创建一个新的仓库。 不要使用READ.ME,许可证或.gitignore初始化存储库,因为本地存储库已经自动生成了一个。 (从您在pod lib create nameYouWantForYourProject) 单击create repository,在终端中转到您的项目: cd nameYouWantForYourProject git add . git commit -m “first commit” 然后复制并粘贴github中提供的命令。 git remote add origin https://github.paypal.com/Slydon/nameYouWantForYourProject.git git push -u origin […]

解决React Native项目中的CocoaPods问题

如果您有以下问题, “我将React-Native更新到最新版本,而CocoaPods无法解决依赖关系…” “ CocoaPods找不到Pod’Folly’的兼容版本……” “`Pod install`不会安装所有依赖项,无法安装GLog …” 那么你来对地方了。 在此博客中,我将介绍一些步骤/答案/方法/方法来解决与React Native项目中的CocoaPods有关的问题。 开始吧… 1.配置CocoaPods依赖关系 确保已阅读有关配置CocoaPods依赖项的官方文档。 与现有应用程序集成·React Native 从头开始新的移动应用程序时,React Native很棒。 但是,它对于添加… facebook.github.io 也很好。 从官方文档开始总是很好。 特别是与与第三方依赖项(例如GLog和Folly)有关的错误,重要的是您的podspec正确。 因此,请确保将您的Podfile与官方文档中指定的Podfile进行比较。 2.更新pod存储库 您的本地Pod存储库可能已过时。 什么?!! 因此,CocoaPod维护spec-repo的本地克隆。 此仓库基本上是所有可用豆荚和版本的列表。 它位于〜/ .cocoapods / repos中。 因此,请确保在尝试任何其他操作之前先更新此存储库。 您可以通过运行以下命令来更新它, $ pod repo更新 官方文档在这里 。 3.验证Xcode的活动dev目录路径 开发人员通常会使用多个版本的Xcode,因此他们不得不在不同版本之间不断跳来跳去,在此过程中,他们忘记了更改Xcode的活动开发人员目录。 建造大型物件时,可以忘记小型物件。 对? ……不! 那么如何解决呢? 首先通过运行检查Xcode的活动开发人员目录, xcode选择-p 这应该打印活动的dev目录路径/Applications/Xcode.app/Contents/Developer 。 如果您以不同的方式命名您的Xcode应用程序,则可能会有所不同,但理想情况下应该是这个。 xcode-select控制xcrun,xcodebuild,cc和其他Xcode和BSD开发工具使用的开发人员目录的位置。 无论如何,如果您选择的xcode版本与此命令显示的版本不同,则应通过运行来切换活动的dev目录, sudo xcode-select -s […]

使用CoreData创建待办事项列表应用程序的简便方法

如果初学者和高级程序员有什么共同点,是我们希望事情简单明了吗? 没有功能或效率的折衷 核心数据是一个非常有用的框架,它使开发人员能够在设备上本地管理数据。 尽管有用且非常强大,但是对于初学者来说,这尤其令人恐惧,尤其是在处理诸如NSManagedObject和NSPredicate NSManagedObject对象时。 当我们只想管理数据时,对于经验丰富的开发人员来说也可能会很费力。 CoreDataBC解决了这个问题; 基于核心数据构建的高级框架。 它可以解决您必须解决的大多数麻烦,并使开发人员更轻松地交互和管理其数据模型。 这就是框架的简单性。 // 保存数据 self.coreData.pushSingleValue([“ ”:]) //检索数据 self.coreData.retrieveData() //获取数据 let coreDataRecords = self.coreData.getData()//返回NSManagedObject的数组 //更新数据 如果让recordToUpdate = coreDataRecords.first { self.coreData.update(recordToUpdate,[“ ”:] } 如果您想要有关该框架的更多信息,请参阅GitHub文档。 在本教程中,我将演示如何使用CoreDataBC创建一个简单的待办事项列表 应用程序 。 没什么复杂的,只是一个简单的UITableView将显示一些数据,一个添加到列表中的按钮以及滑动操作以将其标记为已完成和删除。 先决条件 您应该至少在UITableViews中具有一些背景知识,并已安装CocoaPods。 如果您尚未安装CocoaPods,请参阅CocoaPods安装指南。 如果您正在阅读本文,那么我假设您已经对UIKit框架以及Swift有了很好的理解。 最后说明:一切都会以编程方式完成,只是增加了挑战。 项目设置和安装 创建一个新的Single View Xcode项目,并选中“ Use Core Data并打开终端。 暂时关闭Xcode项目,并在终端中将CD插入Xcode项目目录并初始化pod。 荚初始化 这样,您的项目目录中将有一个名为Podfile的新文件。 在文本编辑器中打开文件,然后在其下方显示“#Pod # Pods for 添加CoreDataBC pod。 […]

使用使用Cocoapods的iOS项目设置GitLab CI

我们都为应用程序编写测试,并将其保留在版本控制的系统(如GitLab或GitHub)中。 但是,我们如何配置GitLab为我们运行单元和UI测试? 我找不到很多文档来解释如何在GitLab上为iOS设置持续集成,因此我正在写这篇文章。 Victor Peschenkov在他的文章中解释了如何在Fastlane中使用GitLab CI。 我的文章重点介绍如何自己运行所有内容。 要求 为了为iOS设置GitLab Runner,我们需要以下工具: 苹果电脑 Xcode 10 GitLab.com帐户(或一个自托管帐户) 家酿 CocoaPods(使用自制软件: brew install cocoapods ) 请先安装这些工具,然后再继续。 配置Xcode 确保从Mac App Store下载Xcode。 安装完成后,打开它并创建一个项目以确保它已完全安装并正在运行。 iOS专案 我创建了一个示例项目,以帮助您更快地入门。 随意分叉它或使用您自己的项目。 请使用以下方法验证您的安装: git checkout git@gitlab.com:skofgar/ios-ci-sample.git 切换到项目文件夹并运行pod install 在计算机上运行以下命令,以验证您可以成功构建并运行测试-这意味着没有“失败”或其他错误消息 xcodebuild测试 -workspace“ CI Sample.xcworkspace” \ -方案“ CI示例”-目标“平台= iOS模拟器,名称= iPhone XR,OS = 12.0” \ | xcpretty -s 安装GitLab Runner iOS项目需要特殊的GitLab […]

使用Pod组织代码库

当涉及第三方库时,Cocoapods是救生员! 将库集成到我们的项目从未如此简单。 在没有cocoapods支持的情况下,集成库需要下载框架和捆绑软件,然后将它们拖到我们的Xcode项目中,链接到我们新添加的二进制文件,然后添加一些iOS链接器标志。 哦! 然后对每个需要使用的库重复这些操作,或者…如果任何工作失败,请重新执行此过程。 😣 所有这些都由cocoapods处理,对于我们来说,这通常是一个单行命令(在您启动pod文件并将其填充了所有必需的库之后)。 这不是有关如何使用cocoapods的文章。 掌握它非常容易,并且已经有很多方法。 相反,我们将寻求使用cocoapods的功能来组织我们的代码库。 我的作业需要重构和更新已经存在的现有应用程序。 因此,我的团队没有选择项目结构的自由。 我们必须处理的代码库具有紧密耦合的组件,并且在多个实例中重复了很多代码片段。 我们也不想破坏已经在运行的代码,因为我们必须尽早为最近发布的iOS设备提供支持。 但是团队知道当前的设计和项目结构将很快成为瓶颈。 当团队中的其他成员添加新功能和服务时,我的任务是逐步重建现有代码库。 最初,我很难确定什么是不妨碍预定发布日期的合适解决方案。 我在这里解救的一件事是椰壳足。 它帮助我解耦了代码,没有破坏功能,也没有被证明是开发过程中的决定因素。 迁移后,处理特定模块变得更加容易! 此外,以这种方式进行组织使集成新功能和SDK成为轻而易举的事。 我们从来不知道使用像这样的cocoapods可以节省我们的工作时间。 我们甚至最终私下托管了不同的模块,并将其分发给黑客马拉松和筛选过程。 好吧..如此称赞可可豆。 让我们看看魔术! 为了演示,我们考虑必须创建一个包含多个组件的应用程序。 在这里,组件是我们为组织代码而创建的pod。 从概念上讲,这将如下图所示。 请记住,始终从文件’ MyApp.xcworkspace’运行项目。 的。 一旦我们通过终端“ pod安装”以集成组件,就会创建xcworkspace文件。 按下视图内的按钮后,“ MyApp ”将在视图控制器上显示警报。 警报生成代码将驻留在我们应用程序的组件(pod)中,我们将其称为“ AlertServices ”。 因此,视图控制器将只需要处理逻辑即可在主项目中呈现和消除警报。 这些警报的创建,样式和自定义将在AlertServices内部进行。 首先,让我们在Xcode中创建一个新项目。 然后选择Cocoa Touch Framework模板。 现在,我们在项目根目录的AlertServices目录内创建一个子目录(只是为了使代码更有条理),并将其命名为MyAppAlerts。 在将目录添加到项目源之后,我们然后创建一个名为MyAppAlerts的类。 我将使用以前在此文件中创建的快餐栏视图,然后在这里完成工作! 下一步,我们现在将移至拥有“ AlertServices.xcodeproj ”文件的目录。 在这里,我们需要创建一个新文件并将其命名为。 podspec (在我们的例子中是AlertService .podspec […]