Tag: 迦太基

如何有效地传教

使用样式处理iOS依赖项 首先:什么是迦太基? 如果您到达此职位,则很可能您已经知道了,但是如果您没有,我很高兴您能成功! Carthage是用Swift编写的依赖项管理器 。 它建立了依赖关系并为您提供了二进制框架 ,但是您保留了对项目结构和设置的完全控制 ,Carthage不会自动修改项目文件或构建设置。 如果您想了解更多关于为什么要在其他替代品上使用迦太基以及如何开始使用它的信息,我建议您阅读雷·温德利希(Ray Wenderlich)的这篇文章,它不会出错。 3个简单步骤: 1.安装自制软件 2.运行 酿造更新 3.运行 酿造安装迦太基 (即使这看起来太多了,在Wolox,我们也有脚本来安装一些有用的东西,其中包括迦太基。) 另外,我们建议您按照本指南添加自动完成功能。 有时,迦太基会给您类似“请更新到最新的迦太基版本…”之类的消息。 在这种情况下,您需要通过运行以下命令进行更新: 酿造更新 酿造升级迦太基 如果出现错误,则可以运行: 酿造更新 酿造重装迦太基 向项目添加第一个依赖项 有史以来第一次依赖吗? 只需按照以下步骤。 1.创建一个Cartfile和/或Cartfile.private文件。 Cartfile就像Gemfile,Dockerfile,Podfile以及其他所有文件一样。 在这里可以指定所需的依赖项及其兼容版本。 Cartfile.private就像一个Cartfile,但是对于不需要运行该应用程序的私有依赖项(例如,用于测试的依赖项)。 迦太基使用语义版本控制,请查看如何使用它。 2.运行以下命令[更改所用操作系统的平台] 迦太基更新–no-use-binaries –platform iOS 此后,将下载依赖项并将其存储在Carthage文件夹中。 还将生成一个Cartfile.resolved文件,该文件存储为每个依赖项下载的确切版本。 update命令将搜索满足您的版本限制的最新版本并下载。 3.将下载的框架添加到带有库的链接二进制文件构建阶段 在列表中,您应该添加出现在Carthage / Builds / 文件夹中的所有.framework软件包。 在其中,您会找到在Cartfile中声明的依存关系以及它们自己的依存关系。 4.在每个具有依赖项的目标中都有一个“迦太基”运行脚本构建阶段[仅当您的项目不是框架时才需要执行此步骤] 在脚本中,您应该编写:/ usr / local / bin / […]

高效迦太基

迦太基 由于iOS 8迦太基一直在帮助创建具有零配置的框架(通过单击复选框共享默认方案除外),因此无需在Xcode中创建工作区即可管理二进制级别的依赖项(由于ABI具有更大的价值即将到来,希望也可以共享动态的第三方库),并通过不指向GitHub而是指向本地文件系统上的目录来测试您的框架。 效率等级1 在项目中拥有第三方依赖性是一件好事,但如果您有大量使用或多或少使用同一组第三方框架的项目,该怎么办? 好吧,默认情况下,您将拥有每个项目中每个依赖项的源代码和二进制文件的副本。 那不是很有效,是吗? 因此,为您的所有项目创建一个共享的Carthage目录,并从使用该目录的每个项目中创建指向该目录的符号链接是有意义的。 让我们在主目录中创建一个共享的Carthage目录,方法是键入ln -s ~/Carthage ./Carthage ,然后输入mkdir Carthage ,然后在项目目录中,通过键入ln -s ~/Carthage ./Carthage创建一个符号链接。 效率等级2 默认情况下,许多框架可针对多个平台(iOS,macOS,watchOS,tvOS)进行编译。 如果我们仅使用iOS,该怎么办? 我们可以通过使用–platform iOS标志来–platform iOS构建时间,即仅针对所需的平台进行构建。 此外,当我们不想不必要地重建时,可以使用–cache-builds标志。 有时,当我们只需要检查较新的版本或更新源代码时,我们甚至可以使用–no-build标志。 效率等级3 它变得太冗长了,不是吗? 别名可以为您提供帮助! 让我们在主目录中创建文件.aliases ,方法是输入nano .aliases ,然后输入nano .aliases并向其中添加以下内容– 别名cartlink =“ ln -s〜/迦太基./迦太基” 别名cartboot =“ carthage bootstrap –no-build” 别名cartupdate =“迦太基更新–no-build” 别名cartbuild =“ carthage build –platform iOS –cache-builds” 现在,我们可以通过键入source ~/.aliases来启用别名,然后通过键入其名称使用任何别名,例如cartlink 。 […]

迦太基:演示如何构建静态框架

流链接: 我们如何将我们的iOS应用的启动时间缩短一半(使用这一技巧) 通过在Automatic上使用框架进行构建,加快了我们的开发流程,并提高了代码质量。 blog.automatic.com 迦太基/迦太基 迦太基–可可的简单,分散式依赖管理器 github.com 步骤1 :从github克隆我的演示项目。 步骤2 :将4个文件:Cartfile,carthage_update.sh,carthage-build-static.sh,ld.py拖放到您的项目文件夹中。 Cartfile:迦太基配置文件。 ld.py:构建静态框架的脚本 carthage-build-static.sh:要构建的脚本,将额外的配置添加到temp xconfig文件中。 carthage-build-static.sh:用于更新和构建的包装器脚本 步骤3 :更新Cartfile 步骤4:将终端cd打开到项目根文件夹。 步骤5:从终端运行文件carthage_update.sh 步骤6 :将所有框架从carthage build文件夹拖放到您的框架中。 您可以在此处找到完整的演示

迦太基的第三方依赖管理

依赖关系-它们是什么?如何使用它们? 软件开发的核心是软件重用,或者利用现有代码进一步开发新的和将来的代码。 正是基于这种心态,团队能够专注于眼前的问题,而不会浪费时间来重新发明轮子。 重用的代码可以是基础构建块,也可以只是方便使用的通用组件库,无论哪种方式,都不直接针对当前的问题。 这些组件称为依赖项。 用软件项目管理这些组件的集成称为依赖管理。 该过程具有与之相关的相关开销,这是不可避免的,但却是必需的。 在移动软件开发方面,以下是依赖性管理的几个选项,并在Compass上提供了有关如何管理依赖性的深入指南。 Git子模块 Git子模块是git存储库的原始依赖项管理器。 它们提供了一种定义应用程序使用但由项目存储库外部存储和管理的其他存储库的方法。 子模块是将依赖项添加到项目中的一种非常手动的方法。 它将从存储库中签出该代码,就是这样。 移动应用程序缺少此工作流,因为通过原始源代码使用已编译的库或框架要容易得多。 椰子足 Cocoapods是iOS和Cocoa应用程序的依赖项管理器,它抽象了依赖项管理的详细信息。 它下载依赖项并将其集成到Xcode工作区中。 让我们通过Xcode的工作区为您完成集成 Cocoapods最大的特点是,依赖项的自动化可能是其最大的缺陷。 在Compass,我们相信您永远都不应束手无策,而会厌倦神奇的解决方案。 依赖关系集成不是一件容易的事,最好不要假设它可以以一种适合所有命令的方式实现,请参见图A。 迦太基 迦太基是“可可的一个简单,分散的依赖性管理器” 迦太基不仅简化了子模块的工作,而且不仅通过检查依赖关系存储库,而且还将代码构建为易于集成的框架,使其可用于移动应用程序。 这就使框架集成工作留给了开发人员,消除了流程中的歧义和不必要的自动化。 在Compass,我们非常喜欢迦太基而不是Cocoapods。 迅捷软件包管理器 最后,我们有了相对较新的Swift Package Manager。 Swift Package Manager是用于管理Swift代码分发的工具。 它与Swift构建系统集成在一起,以自动化下载,编译和链接依赖项的过程。 Swift Package Manager正在发展声望,成为iOS依赖管理中的下一件大事。 不幸的是,由于严格限制仅使用Swift和其选择加入的性质,它尚未实现其成为主流的目标。 如果并且直到那一天到来,我们的团队将使用Carthage进行我们的所有iOS依赖关系管理,并强烈建议您这样做。

Xcode工作区ile Birden Fazla Proje Kurulumu

在Xcode工作区中,可以在iOS上下载和下载iOS上的应用程序。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 iOS发行版,macOS,tvOS发行版,发行版,发行版,发行版,发行版,发行版,发行版和发行版。 Pekiamaçnedir? Buyaklaşımmodülerdüşünmenizisağlar。 Projenizi birden fazlamodüleayırmanızdaha iyiarayüzlerve sorumluluklartasarlamanızısağlar。 她的模范比尔·乌尔卡·奥兰卡多·丹莱她的比林宁·肯迪测验·塞拉莱·奥拉克·科维奇·测验·萨曼·卡曼·曼萨奇·萨莱亚卡克。 Birbaşkafayda ise yenidenkullanılabilirlik。 她的模样很漂亮。 Bu da bize下摆Geliştirmesürecinde下摆debakımsürecindezamankazandırır。 BuanlatımımdaXcode 9.3kullandım。 Bu versiyonda eski versiyonlarakıyaslaçokufak bir fark var ve bufarkıyerigeldiğindebelirteceğim。 Eski versiyonlardan birinikullanıyorsanızyine de takip edebilirsiniz。 哈迪başlayalım! 工作空间 Bos bir工作区oluşturarakbaşlıyoruz。 Xcode File工作区中工作,在工作区中工作。 肯迪西的工作区。 Yine Xcode’un File menüsünükullanıyoruz。 BumenüdenProjectseçtiğimizzamanaşağıdakiekranıgörüyoruz。 Tam olarak bu noktada yenioluşturduğumuzprojeyi,biröncekiadımdaoluşturduğumuzboşworking’e ekliyoruz。 Projeyibaşkabir dizinde kaydetmek […]

保持您的Cartfile为最新

这篇文章将详细介绍如何在项目中添加构建阶段,当Cartfile在项目中不再是最新时,它将发出警告并通知您。 第一步是将新的“运行脚本”任务添加到项目的“ 构建阶段 ” 然后在构建脚本中添加以下脚本

iOSアプリの启动速度を2倍にするために,复数のDynamic FrameworkをStaticひ,ひとつのDynamic Frameworkを作るwith Swift

iOSカiOSエンジニアのmuukii(Twitter)です🥃 私人が开発を担当しているPairs Global(Pairsの海外向がアプリ)はアプリの起动がとても遅いのです。 一体なぜなのか。 OSはアプリを启动してAppDelegate(厳密にはmain关数)が呼び出されるまでには様々な处理を行います。 起动の部分の处理を最适化することでアプリが起动していない状态からの起动の高速化が期待できます。 アプリ起动高速化のための初始き(长め) には,用语について,厳密にはFrameworkとLibaryは异なるものですが,性质は近いので本记事では次のように用语を用います。 静态框架または静态库をめてとめて「静态框架」と呼びます Dynamic Frameworkまたは动态库をまとめて“ Dynamic Framework”と呼びます。 OSはアプリを启动してAppDelegate(厳密にはmain关数)が呼び出されるまでには様々な处理を行います。 起动の部分の处理を最适化することでアプリが起动していない状态からの起动の高速化が期待できます。 起动までにどのような处理が行われているのかはWWDCの资料で知ることができます。 启动时间(应用启动时间)の最适化 优化应用启动时间– WWDC 2016 –视频– Apple Developer 启动应用程序是一个复杂而微妙的过程,并且会影响不同应用程序设计的启动时间。… developer.apple.com 今回取り组みたいことは起动时间に含まれる动态框架の动的リンク时间の削减です。 WWDCの资料ではdylibは使用は高価であり少ないほど良いと示しています。 あまり具体的な话はここでは触れませんが,つまりは模块を动态框架ではなく静态框架としてビルしてビ使用することで起动时间の最适化が可能ということです。 しかし,Swiftの登场以降模块を使用する上では动态框架の使用を避けることは难しいことでした。 XcodeがSwiftを含むコードベースを静态框架としてビルドすることに対応していなかったからです。 codeの问题はXcode10では解消されており,静态框架または静态库としてビルドすることが可能になっています。 迦太基のドキュメントでも起动时间の高速化について検讨て検アイデアが掲载されています。 迦太基/迦太基 Cocoa的简单,分散式依赖管理器– Carthage / Carthage github.com では,动态框架を利用するメリットは何かと言うと, 実行可能なTargetが复数ある场合において,ソースコードを共有するケースです。 具体的にはアプリ本体とApp Extensionなどが挙げられます。 ざっくりとした说明にしておきますが,次のような构成だとします。 应用程序(可执行)1MB 扩展名(可执行)1MB これらに共通のコードを使用したい场合,共通のコードを一绪にコンパイルしても良いですが,Moduleとして包むことでInternalのメソッド呼ド出しを防ぐなどの疎结合性を保つことが可能になります。 なので,MyCoreというModuleを用意します。 MyCore 1MB MyCoreが静态框架だと中身(シン宝ボ)が可执行目标と合体するので,各サイズが次のようになります。 应用程序(可执行)+ MyCore(静态框架)= 2MB 扩展(可执行)+ MyCore(静态框架)= […]

通过CocoaPods分发框架的10个技巧

在我相对较短的iOS开发生涯中,我与CocoaPods建立了爱恨交加的关系。 当它起作用时,它很棒,但是使它按您需要或期望的方式工作通常具有挑战性。 但是,在我最近的项目中,我对它有一个健康的尊重,我希望这些技巧可以帮助您充分利用真正的,社区开发的依赖项管理器,尽管有一些小缺点。 以下技巧是我主要是通过反复试验获得的小智慧。 CocoaPods文档简洁明了且有用,但是对于初学者来说有时不够详尽,在某些情况下,有用的功能和选项是非常隐蔽的。 毋庸置疑,所有观点都是我的观点,尽管我相信所写内容都是准确的,但我对此不做任何保证。 在这种情况下,我请您参考标准的开发者免责声明: “它可以在我的机器上工作!” 在Flickr上浏览Mike Rohde的照片。 Mike Rohde已将5118张照片上传到Flickr。 www.flickr.com 当我刚开始使用CocoaPods时,在发布之前测试我的Podspec更改似乎是一门黑手艺。 有关如何执行此操作的指令很多,但是对于初学者来说,没有一个指令特别简单。 大多数说明都谈论如何设置自己的本地规范存储库,并将Podspec推送到其中,然后在Podfile中更改source参数以指向本地本地存储库。 我发现此工作流程缓慢且麻烦,但是当时,我不知道有更好的方法,直到我发现了一个非常简单的窍门:在本地更改Podfile,然后在测试目标中,指定依赖项时,只需在行尾添加, :path => ‘/path/to/your/spec.podspec’ to , :path => ‘/path/to/your/spec.podspec’ 。 这将告诉CocoaPods在您指定的位置而不是远程规格存储库中查找Podspec。 #示例Podfile #platform:ios,’9.0’target’MyApp’做 #如果不想使用动态框架,请注释下一行 use_frameworks!#MyApp的广告连播 #:path应该表示相对于包含Podfile的目录的路径,该目录包含Podspecpod“ MyPod / Core”,:path =>’../../mypodspec.podspec’ 结束 通常,Podspec会指向GitHub上的特定发行版标签,该标签将告诉CocoaPods查找该特定发行版,下载代码并进行构建。 但是,如果您还没有准备发布库,并且没有在远程仓库上创建发布标签,该怎么办? 不要惊慌:这是一个妥善保管的秘密,但是CocoaPods也可以直接从特定分支提取代码,从而无需在GitHub上发布标记版本。 在构建时确实会收到警告,说明您尚未指定发布标签,但除此之外,它的工作还不错,并且CocoaPods从指定的分支中提取了最新的提交。 在文档中确实对此做了简短的提及,但是没有给出显示确切语法的示例。 在您的Podspec中,通常会指定 s.source = {:git =>“ https://github.com/your-company/your-repo.git”,:tag =>“#{s.version}”} …您可以改用 s.source = {:git =>“ https://github.com/your-company/your-repo.git”,:branch […]

使用Carthage更快地在Xcode中构建。

让我马上告诉你! 迦太基+罗马为我们提供了将近2.5倍的构建速度。 好吧,如果您要处理大型项目,那将是巨大的性能提升。 Cocoapods是自然的首选 在Pulse,我们使用可可豆荚安装了第三方库,这是我们开始编写iOS应用程序时的自然选择。 最终,该项目的规模随着对Firebase,AsyncDisplayKit,Realm,RxSwift和其他24个对象的依赖而变得越来越大。 项目编译时间开始变得越来越糟,并阻碍了开发人员的工作效率。 一些使用2015年款MacBook Pro的开发人员开始提到,该项目大约需要40分钟才能完成构建。 由于Xcode无法保持代码建议的正确性,因此开发人员通常会在构建项目时检查代码的插入和编译错误,因此这已成为一个巨大的问题。 第一次与迦太基相遇 起初,我花了一些时间来设置迦太基和可可足。 我遇到了这样的问题:Cocoapods和Carthage都无法解决其他库中常见的父项依赖关系。 这会引起问题,尤其是当您在多个库中使用同一父依赖项的两个版本时。 经过进一步的研究,我意识到自己做错了。 我不必每次都运行“迦太基更新”,而只需在新机器上安装时运行“迦太基引导程序”。 这个备忘单在整个过程中对我有很大帮助。 迦太基备忘单 我开始将所有RxSwift及其相关的依赖项移至迦太基。 我立即看到干净的构建时间减少了很多,然后继续将其他所有内容移到我的`Cartfile`中。 结果是惊人的,团队非常高兴,它最终帮助提高了开发人员的生产力。 CI变得比蜗牛还慢 我们将Bitrise用于CI / CD。 由于某些原因,迦太基的构建时间变得更慢。 每次触发新的CI构建时,我们都在运行`carthage bootstrap`。 此步骤本身耗时40分钟。 我认为,如果可以缓存所有框架构建并在以后的构建中重用它们,则可以节省大量时间。 我开始寻找解决方案,并发现了一个名为Rome的强大工具。 Rome非常容易设置,而我最喜欢此工具的地方是版本解析。 罗马使用Amazon S3存储桶来存储已编译的框架和dSYM。 之后,您可以运行rome download来下载所有预编译的框架。 集成了罗马之后,迦太基的构建就无济于事了,因为我只需要编译一次框架即可。 结论 Bitrise在Carthage上的总构建时间约为65分钟,在完成此设置后减少到17分钟。 这不是令人难以置信吗? 如果您的大型项目有很多外部依赖项,那么您应该尝试一下。 我希望这可以帮助每个人解决iOS开发带来的非生产性问题。 我们也很想听听你们提出了什么其他解决方案来减少构建时间。 反馈 如有任何疑问,请随时发表评论。 不要退缩拍手🙂

如何使用迦太基在Xcode上安装Alamofire

Carthage是一个分散的依赖性管理器,可构建您的依赖性并为您提供二进制框架。 您可以使用以下命令将Carthage与Homebrew一起安装: $ brew更新 2. $ brew安装迦太基 3.在您的Cartfile文件中指定它: github“ Alamofire / Alamofire”〜> 4.7 使用创建汽车文件: 触摸Cartfile 您可以通过vim打开它,也可以通过运行xcode打开它: 打开-Xcode Cartfile 4. $ 迦太基更新 注意:此步骤可能存在错误。 如果你有 然后,恭喜你。 您只是说了另一个糟糕的Mac Bug。 解决方案在这里:https://stackoverflow.com/questions/40743713/command-line-tool-error-xcrun-error-unable-to-find-utility-xcodebuild-n 5. 将构建的Alamofire.framework拖到Xcode项目中。 我的意思是将其强制拖动到xcode左列目录(而不是文件夹)中。 而已。 我知道这很糟糕。 但是……然后拧紧它。 常问问题: 错误:dyld:未加载库:@ rpath / Alamofire.framework / Alamofire 通过确保框架显示在target-> general-> embedded binaries and linked Framework and Library部分下来解决此问题