我有一个包含以下内容的工作区:
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变量。
答案 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_with
和xcodeproj
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