【问题标题】:iOS internal podspec installation not installing external PodsiOS 内部 podspec 安装未安装外部 Pod
【发布时间】:2015-01-12 10:55:05
【问题描述】:

我正在编写一个使用外部库(如 Restkit)的 iOS 库。在我的库中一切正常,但是当我使用 Pods 将它导入其他项目时,只导入了我的源。这意味着我没有像 Restkit 这样的外部依赖项。

我在我的 podspec 文件中添加了:s.dependency 'Restkit' '~> 0.24.0'

但我看不出有什么不同。我感觉我错过了什么,有人可以帮我吗?

问候

编辑

SDK podspec 文件(重要部分):

# ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

s.source       = { :git => "***************.git", :tag => "0.0.1" }

# ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

s.source_files  = "bee-ios-sdk/sdk", "bee-ios-sdk/sdk/**/*.{h,m}"
s.exclude_files = "bee-ios-sdk/sdk/Exclude"

# s.public_header_files = "Classes/**/*.h" # Maybe this ?

# ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

# s.requires_arc = true

# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
s.dependency 'RestKit', '~> 0.24.0'
s.dependency 'CocoaSecurity'

还有我的应用程序中的 Podfile

target 'bee' do
    pod 'bee-ios-sdk' # Private pod repository containing the podspec above
end

希望对你有帮助

编辑 2

$ pod install
Analyzing dependencies
Downloading dependencies
Installing bee-ios-sdk (0.0.1)
Generating Pods project
Integrating client project

如您所见,我只有我的来源。当我尝试构建时,没有发现 RestKit 和其他导致我找不到“RestKit/RestKit.h”文件错误的痕迹。在我的 App podfile 中添加我所有的 SDK 依赖项可以解决问题,但这显然并不性感。

我的 podfile 顶部没有源 'github.com/CocoaPods/Specs.git' 吗? 现在,我的 podfile (app) 请求一个私有 git repo,其中包含我的 sdk 的 url 的 .podspec 文件。我跟着这个tutorial 去做了。

【问题讨论】:

  • 您可能需要包含您的 podspec 文件和您的 podfile
  • @DanielGalasko 你能说出你的意思吗?我应该在哪里/如何包含这些文件?我的 App Podfile 中只有 pod 'mySDK' 和运行 pod install download .h/m 文件,但没有在我的 SDK Podfile 中声明的依赖项。
  • 是的,但是您编写了一个自定义 podspec,那么为什么不将它包含在帖子中呢? @MajorShepard
  • 补充了一些信息,如果你需要更多,我会继续挖掘
  • 好多了!您是否还可以在 Xcode 的文件导航器中列出 Pods 目录中的内容。只是想了解是什么导致您相信缺少依赖项

标签: ios xcode cocoapods


【解决方案1】:

我已经使用 Cocoapods 构建了几个内部库,虽然我无法立即理解为什么您无法正确获取依赖项,但我认为概述一下我是如何做到的可能是个好主意。

总体而言,典型安装(从头开始)具有以下步骤:

  1. 在您的机器上安装 cocopods (sudo gem install cocoapods)
  2. 设置一个私有存储库来存放您的所有 cocoapod。
  3. 创建新的 pod 规范
  4. 运行 linter,然后将您的规范推送到 repo

第 1 步很简单,让我们从第 2 步开始:

设置一个私有仓库来存放你所有的 cocoapods

您应该拥有对存放您的 pod 的 git 位置的推送访问权限。设置此 repo 后,您可以将其添加到您的安装中:

pod repo add internalpods 'github.com/private-cocoapodsspecs.git'

我当然输入了一个伪造的 git url

创建您的第一个规范

创建规范很容易:

pod spec create SPEC_NAME

SPEC_NAME 是你希望你的规范被调用的地方

我不会在这里详细介绍,因为您的规格对我来说似乎不错。但是,我尝试做的总是将一个示例项目放在您检查规范的存储库中。 cocoapods 的一大特色是您可以在本地参考规格。所以说我们写AFNetworking,git中的文件结构可能是这样的:

AFNetworking
     .git
     AFNetworking.podspec
     AFNetworking/ 
          (All the classes we want in our pods)
     ExampleProject/ 
          (Example project that will use the spec locally)
          podfile

在示例项目的 podfile 中,我们可以这样做:

source 'https://github.com/CocoaPods/Specs.git' #include this if you will be referencing any public pods!
source 'github.com/private-cocoapodsspecs.git' #our internal repo which we don't need yet
pod 'AFNetworking', :path => '..'

这可以让您在运行任何安装或推送到您的服务器之前了解您的 pod 是否存在任何问题,因此我非常喜欢这种方法。它还可以让您开发您的 pod 并拥有一个很好的示例项目,您可以随时打开它来对您的 pod 进行更改或测试新功能。

在您的示例项目中运行 pod install 应该可以让您启动并运行您的 pod 和所有依赖项。不要忘记您可以随时将--verbose 添加到安装中。

现在是时候将你的善意发送到遥控器了:

lint 和 push

linter 将验证您的规范,以确保它已准备好推送(注意我如何包含我们内部远程的源 URL):

pod spec lint --sources=github.com/private-cocoapodsspecs.git,https://github.com/CocoaPods/Specs.git --verbose

如果这一切都很好,你可以继续前进。我通常喜欢在这样做时允许警告,因为我们的内部 pod 没有许可证,如果你在没有许可证的情况下尝试推送,一切都会崩溃:

pod repo push internalpods SPEC_NAME.podspec --allow-warnings --verbose

看看我如何使用我们在步骤 1 中设置的 internalpods 名称。

希望这足以提供帮助。

【讨论】:

  • 非常感谢您的解释!一切正常,现在我明白它是如何工作的了!再次谢谢你 ! :)
  • @MajorShepard 好消息!万事如意!
【解决方案2】:

CocoaPods 是一个很棒且非常简单易用的工具。大多数时候你不想手动导入它生成的项目。

要将 Pods 依赖项添加到您需要的项目中:

  • 确保您拥有最新版本的 pod,在终端运行:sudo gem install cocoapods
  • 在您的 .xcodeproj 文件附近的项目目录中创建名为“Podfile”(无扩展名)的文件。
  • 编辑“Podfile”并将这一行添加到其中: pod 'Restkit', '~> 0.24.0'。更多选项请查看CocoaPods Guide page
  • 保存文件
  • 如果 Xcode 仍然打开,请关闭它
  • 打开终端并 cd 到您的项目目录(“Podfile”所在的位置)
  • 运行pod install

此命令将下载依赖项并在您的 .xcodeproj 附近创建 .xcworkspace 文件。运行完成后 - 请务必打开 .xcworkspace 文件。

现在您应该能够在您的工作区中看到名为 Pods 的新项目 - 这是您构建所有依赖项并将其添加到主项目的地方:Screenshot

【讨论】:

  • 感谢您的回答。这正是我在我的 sdk 库中所做的,并且运行良好。但是,当我想使用这个库(我在我的另一个项目中作为 Pod 导入)时,我放入其中的依赖项(sdk)没有被下载:/ 这就是我卡住的地方
  • 如果您想将 pod 添加到您自己的框架中 - 请查看此处:stackoverflow.com/a/22872292/983914
猜你喜欢
  • 2019-05-24
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 2013-08-27
  • 2011-08-17
相关资源
最近更新 更多