26

我有一个工作区,其中包含:

  • 我的iPhone.xcodeproj
  • sharedStuff/sharedStuff.xcodeproj

sharedStuff.xcodeproj 构建一个依赖于 myiPhone.xcodeproj 的静态库(为简单起见,假设每个项目都有一个目标)。

现在我想通过 CocoaPods 添加一个对两个项目都可用的库。

我的 Podsfile 看起来像这样:

workspace 'myWorkspace.xcworkspace'
platform :ios

target :myiPhone do
    xcodeproj 'myiPhone.xcodeproj'
    pod 'MBProgressHUD', '~> 0.6'
end


target :sharedStuff do
    xcodeproj 'sharedStuff/sharedStuff.xcodeproj'
    pod 'MBProgressHUD', '~> 0.6'
end

当我构建时,我得到了这些错误:

差异:/../Podfile.lock:没有这样的文件或目录差异:/Manifest.lock:没有这样的文件或目录错误:沙箱与 Podfile.lock 不同步。运行“pod install”或更新您的 CocoaPods 安装。

有人知道这里发生了什么吗?

更新:从外观上看,执行“Check Pods Manifest.lock”构建阶段时未设置 PODS_ROOT 变量。

4

5 回答 5

23

我的工作区中有 2 个项目,接受的答案对我不起作用。但最后我已经设法让 Cocoapods 与 2 个项目一起正常工作。这是我的 pod 文件的样子:

workspace 'Projects.xcworkspace'
platform :ios, '8.0'

use_frameworks!

# ignore all warnings from all pods
inhibit_all_warnings!

def shared_pods
    # all the pods go here
    # pod 'Parse' etc.
end

xcodeproj 'Project1.xcodeproj'
xcodeproj 'Project2/Project2.xcodeproj'

target :Project1 do
  xcodeproj 'Project1'
  shared_pods
end

target :Project2 do
  xcodeproj 'Project2/Project2.xcodeproj'
  shared_pods
end
于 2015-11-19T15:25:25.943 回答
14

使用当前语法,它看起来像这样

use_frameworks!
workspace 'myWorkspace'

project 'myiPhone'
project 'sharedStuff/sharedStuff'


target 'myiPhone' do
    project 'myiPhone'
    pod 'MBProgressHUD', '~> 0.6'
end


target 'sharedStuff' do
    project 'sharedStuff/sharedStuff'
    pod 'MBProgressHUD', '~> 0.6'
end
于 2018-10-03T03:15:52.970 回答
10

您的 xcode 项目中的第一个目标有一个构建阶段来对两个锁定文件执行差异。但是您的 xcode 项目配置似乎没有引用 Pods/Pods-libPods.xcconfig 中配置的用户定义设置。

看起来您正在尝试将 Pod 与多个 xcodeprojs 中的特定目标链接。如果我的假设是正确的,那么您使用的target属性不正确。该target属性会在 Pods 项目中创建一个新的静态库,其中包括您在其中配置的 Pod target

Pods xcodeproj 的默认目标是 libPods,它生成 libPods.a 静态库。如果您不指定target. 因此,如果您不关心在 Pods xcodeproj 中生成多个静态库,请不要费心定义目标并使用该link_with属性将默认 libPods target(静态库)链接到 xcodeprojs 中的目标。

例如,以下 Podfile 将在 Pods.xcodeproj 中创建一个 libPods 目标,它将 MBProgressHUD 源添加到编译阶段,然后将定义 PODS_ROOT 和 PODS_HEADER_SEARCH_PATH 的 xcconfig 文件添加到每个 xcodeprojs。然后它将这个静态库链接到您指定的目标link_withxcodeproj

workspace 'myWorkspace.xcworkspace'
platform :ios

xcodeproj 'myiPhone.xcodeproj'
link_with 'myiPhone'
xcodeproj 'sharedStuff/sharedStuff.xcodeproj'
link_with 'sharedStuff'

pod 'MBProgressHUD', '~> 0.6'
于 2013-06-05T19:53:49.087 回答
7

这是我的文件夹结构

OB
|podfile
|Project1->Project1.xcodeproj
|Project2->Project2.xcodeproj

这是我在 OB 文件夹中的 podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

workspace 'OB.xcworkspace'
use_frameworks!

# ignore all warnings from all pods
inhibit_all_warnings!

project 'Project1/Project1.xcodeproj'
project 'Project2/Project2.xcodeproj'

abstract_target 'OB' do
    pod 'Alamofire', '~> 4.0'

    target 'Project1' do
        project 'Project1/Project1.xcodeproj'
    end

    target 'SchoolKids' do
        project 'Project2/Project2.xcodeproj'
    end
end

这会将 Afnetworking/Alamofire 添加到两个项目中。如果我们需要一个特定项目的专有 pod,那么我们可以这样做

 target 'Project1' do
        project 'Project1/Project1.xcodeproj'
        pod 'Alamofire', '~> 4.0'
    end
于 2016-12-03T06:01:50.410 回答
2

感谢 Rahul Vyas 的回答,我终于在我的项目中取得了成功。我的项目在 react-native 中,我使用 git 子模块作为子项目。所以这是我的 pod 文件:

workspace 'LuminPDFApp.xcworkspace'
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
use_frameworks!

inhibit_all_warnings!

project 'LuminPDFApp.xcodeproj'
project '../submodules/react-native-filepicker/ios/RNFilePicker.xcodeproj'

abstract_target 'LuminPDFApp' do
    pod 'SwiftyDropbox'

    target 'LuminPDFApp' do
        project 'LuminPDFApp.xcodeproj'
    end

    target 'RNFilePicker' do
        project '../submodules/react-native-filepicker/ios/RNFilePicker.xcodeproj'
    end
end
于 2018-08-23T04:28:58.267 回答