Tag: 可可足

如何在Swift中创建私有CocoaPods

CocoaPods是Swift和Objective-C Cocoa项目的依赖项管理器。 CocoaPods可以帮助我们优雅地扩展项目。 可以使用CocoaPod开发出色的库,只需运行一个命令即可轻松将其集成到项目中。 在这里,我们将讨论如何创建我们自己的CocoaPod(恰好是一个私人吊舱)。 先决条件: Xcode 9.3和Swift 4.1 安装在机器上的CocoaPods 让我们逐步开始创建我们的私人吊舱。 步骤1:建立广告连播 要创建和验证Pod,我们将使用pod lib命令。 因此,让我们开发一个String的简单扩展(还有更多),这将使几个字符串函数变得很方便。 让我们将此吊舱命名为HandyExtensions 使用以下命令创建一个Pod,该Pod将下载模板并简化我们的工作。 pod lib创建HandyExtensions 运行以上命令将提示您回答一些问题,例如平台,编程语言,所需的演示应用程序等。 Pod模板将被下载。 导航到Example文件夹,然后打开HandyExtensions.xcworkspace并使用所有相关信息编辑podspec文件(在Podspec Metadata文件夹下)。 摘要,描述,源和依赖项(如果适用)是您要记住的几件事。 默认情况下,源将显示为 s.source = {:git =>’https://github.com/sagardesai16/HandyExtensions.git’,:tag => s.version.to_s} 我们将必须将源更新为我们的私人仓库网址。 我更喜欢使用BitBucket。 s.source = {:git =>’https://abc@bitbucket.org/abc/handyextensions.git’,:tag => s.version.to_s} 重要提示: 确保根据库的要求更新deploy_target。 如果您打算在Pod库中使用资产(png),则必须取消注释resource_bundles s.resource_bundles = {‘HandyExtensions’=> [‘HandyExtensions / Assets / *。png’]} 步骤2:验证podspec 由于我们已更新podspec文件中的所有相关信息。 让我们验证podspec文件并检查一切是否正常。 打开终端并转到您的podspec文件所在的目录,然后执行以下命令: 豆荚皮棉 […]

混合Swift和Objective-C cocoapods

我在将快速编写的pod添加到也使用Objective-C pod的项目中之后,最近遇到了一个cocoapods问题。 添加swift依赖关系需要添加use_frameworks! 到Podfile 。 一旦进行了更改,其中一个object-c pod的依赖就变得异常严重: FMDB (事件跟踪器)使用FMDB (SQLite周围的Objective-C包装器),它利用了非模块化标头包含( #import “sqlite3.h”而不是#import )。 在框架内,这是不正确的。 Cocoapods允许这样做,直到最近进行了更改。 Xcode抱怨以下错误: 和 在FMDB pod的作者解决此问题之前,需要一种解决方法。 可以将Podfile配置为回退到以前的行为,再次允许框架模块中包含非模块化包含: post_install做|安装程序| installer.pods_project.build_configuration_list.build_configurations.each |配置| configuration.build_settings [‘CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES’] =’是’ 结束 结束 这为每个pod设置了一个编译器标志,该标志允许框架模块中的非模块化包含。 也可以为项目文件中的每个pod手动添加该标志。 现在将建立该项目。 除非您尝试将使用不正确导入样式的任何头文件导入到桥接头或任何其他Objective-c头文件或源文件中。 为了让Xcode知道在哪里寻找这些标题,请将标题位置添加到项目文件中“ 构建设置”下项目的“ 标题搜索路径 ”中 : 对于Pods/目录的相对路径,请使用前缀${PODS_ROOT}/ 。 SnowplowTracker ( 0.6.2)版0.6.2)使用了错误的标题。 为了让Xcode查找所有相关的SnowplowTracker标头,请添加: “ $ {PODS_ROOT} / SnowplowTracker / Snowplow” 包括引号。 对于SnowplowTracker ,现在将编译以下内容: 如果不这样做(我们的CI环境不喜欢这样),请为导入路径 (而不是标题搜索路径 […]

如何制作依赖于其他可可足类的可可足类

2018年7月24日 因此,如果您已打开本文,则可能要尝试为使用其他Cocoapods的Cocoapods创建一个库。 原则上看似简单,但实际上没有官方方法可以做到。 实际上,只有通过分散的StackOverflow帖子和Github问题,我才能弄清楚。 好了,不再! 本教程旨在成为有关如何创建使用其他Cocoapods的Cocoapods的综合教程(多达您想要的!) 旁注 :如果您只想看工作代码,可以在我的Github上找到最终产品 所以首先,您显然需要安装cocoapods。 打开终端(您将经常使用它)并在下面的命令中输入。 sudo gem install cocoapods 注意:如果出现此错误: ERROR: While executing gem … (Gem::FilePermissionError) You don’t have write permissions for the /usr/bin directory. 尝试以下方法: sudo gem install cocoapods -n /usr/local/bin 如果以上命令永远存在,请使用–verbose标志运行它。 这样一来,您可以看到它挂了什么。 sudo gem install cocoapods -n /usr/local/bin –verbose 另请注意:根据您计算机的处理器/功能,以下所有命令似乎永远都用不完 。 这就是为什么我建议在每个命令中添加–verbose标志的原因。 (个人而言,我使用的是2011 Mac Mini,每个命令至少需要半分钟。是的,慢速折磨☹️) 无论如何,现在我们已经安装了Cocoapods,是时候创建pod了。 我们将使用名为pod lib […]

使用Cocoapods处理Swift版本

今天,我将“虚构”迁移到Swift4。但是我得到了 -错误| [OSX] xcodebuild:返回失败的退出代码。 -错误| [OSX] xcodebuild:缓存/源/Mac/NSImage+Extensions.swift:32:64:错误:“ png”已重命名为“ PNG” -注意| [OSX] xcodebuild:AppKit.NSBitmapImageRep:57:27:注意:Swift 4中引入了“ png” -错误| [OSX] xcodebuild:缓存/源/Mac/NSImage+Extensions.swift:32:71:错误:“ jpeg”已重命名为“ JPEG” -注意| [OSX] xcodebuild:AppKit.NSBitmapImageRep:52:27:注意:’jpeg’是在Swift 4中引入的 该项目配置为使用Swift 4并且其依赖项Cache正确使用.png和.jpeg hyperoslo / Cache:Source / Mac / NSImage%2BExtensions.swift @ master 为什么这样🤔 事实证明.swift-version仍然显示3.0 。 将其更改为4.0可解决此问题。 .swift-version提示您指定应将哪个Swift版本用于吊舱CocoaPods / CocoaPods#5841 原始故事https://github.com/onmyway133/blog/issues/80

依赖管理器:在Cocoapods和Carthage之间切换

最初 由 Andres 于2018年7月30日 发布在 可缩放路径 上。 如今,编写所有自己的代码的开发人员很少,而且有充分的理由。 当您找到写得很好,受良好支持的第三方库来帮助更快地构建产品时,为什么还要重新发明轮子呢? 实际上,我们只是写了一篇文章,描述了我们自己的评估第三方库的过程。 在您的项目中插入其他人的代码确实会引发一些问题,包括需要有效管理所有这些不同的库。 依赖管理器通常扮演的角色。 依赖项管理器只是一个工具,可以帮助您将外部库集成到项目中。 通常,它们包括一个列出哪些库和版本可用以及如何获取它们的列表。 一旦依赖性管理器了解了所有这些信息,它将负责获取正确的版本并将其集成到您的项目中(或让库准备在以后由您集成)。 在本文中,我将重点介绍在Apple环境中使用的依赖项管理器:Carthage,CocoaPods和Swift Package Manager。 这篇文章不是依赖管理器的初学者指南,而是交叉引用,因此开发人员可以轻松地学习在CocoaPods和Carthage之间进行切换。 例如,假设您与CocoaPods进行了广泛的合作,但是突然发现自己参与了一个使用Carthage的新项目。 您不需要学习什么是迦太基-您只需要学习如何执行以前在Cocoapods中但在Carthage上执行过的动作。 本文将促进这种日益普遍的过渡。 我还概述了较新的Swift Package Manager的介绍,以突出其当前的用例和弱点。 CocoaPods于2011年推出,是Cocoa和Cocoa Touch环境的第一个依赖项管理器。 由于它是用Ruby编写的,因此必须作为Gem分发。 因此,您将需要CocoaPods的Ruby语言的兼容版本。 在撰写本文时,cocoapods-core gem需要Ruby 2.0.0或更高版本(macOS 10.13.3随Ruby 2.3.3一起提供,因此这不应该成为问题)。 CocoaPods具有集中式方法。 这意味着CocoaPods具有一个存储库(位于Github上),该存储库将Pod的名称(库在CocoaPods上接收到的名称)映射到Pod的下载位置。 采用集中化方法的优点是您拥有一个可以在CocoaPods上存储所有可用库的元数据的地方。 反过来,这提供了一种搜索库的简单方法。 缺点是,如果该存储库发生故障,您将无法解决您的依赖项。 在迦太基中,当您运行carthage update ,程序将检查依赖关系,将其构建并保留,以供您抓取并将其集成到项目中。 CocoaPods不同,当您运行pod install ,它将下载库并创建一个新的.xcworkspace。 生成的.xcworkspace将在其中包含两个项目:您刚刚创建的项目和另一个称为“ pods”的项目。 从现在开始,您将必须使用此工作区来开发应用程序。 您可以查看下面的屏幕截图,以更清楚地了解这一点。 编译项目时,依赖项也会被编译。 CocoaPods仅通过运行pod install即可配置所有内容。 真好! 为了表明您要在项目中使用哪些库,您需要将它们添加到Podfile中。 这是一个ruby文件,您可以在其中指定要安装的Pod,版本和目标。 […]