将CocoaPods与多个项目一起使用

Mih*_*ian 19 xcode xcconfig ios cocoapods

我有一个工作区,包含:

  • myiPhone.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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

And*_*eev 18

我的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
Run Code Online (Sandbox Code Playgroud)


Fer*_*ney 8

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

看起来您正在尝试将Pod与多个xcodeproj中的特定目标相关联.如果我的假设是正确的,那么您正在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'
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用.只有最后一个`link_with`语句才能获得荣誉.所以在上面的例子中,与"Pods.a"链接的唯一目标是"sharedStuff". (4认同)

小智 7

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

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
Run Code Online (Sandbox Code Playgroud)


Rah*_*yas 6

这是我的文件夹结构

OB
|podfile
|Project1->Project1.xcodeproj
|Project2->Project2.xcodeproj
Run Code Online (Sandbox Code Playgroud)

这是我在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
Run Code Online (Sandbox Code Playgroud)

这将为两个项目添加Afnetworking / Alamofire。如果我们需要特定项目的专用广告连播,则可以执行此操作

 target 'Project1' do
        project 'Project1/Project1.xcodeproj'
        pod 'Alamofire', '~> 4.0'
    end
Run Code Online (Sandbox Code Playgroud)