将CocoaPods与多个项目一起使用

时间:2013-05-28 14:58:30

标签: ios xcode cocoapods xcconfig

我有一个包含以下内容的工作区:

  • myiPhone.xcodeproj
  • sharedStuff / sharedStuff.xcodeproj

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

现在我想通过CocoaPods添加一个应该可供两个项目使用的库。

My 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

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

  

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

任何人都知道这里发生了什么?

更新: 从它的外观来看,当执行“Check Pods Manifest.lock”构建阶段时,不会设置PODS_ROOT变量。

5 个答案:

答案 0 :(得分:17)

我的Workspace中有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

答案 1 :(得分:8)

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

看起来您正在尝试将Pod与多个xcodeproj中的特定目标相关联。如果我的假设是正确的,那么您错误地使用了target属性。 target属性在Pods项目中创建一个新的静态库,其中包含您在target内配置的Pod。

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'

答案 2 :(得分:6)

这是我的文件夹结构

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:1)

由于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