xcode - 在Framework和Workspace之间共享代码

时间:2014-10-02 13:05:47

标签: objective-c xcode frameworks cocoapods workspace

我有一个Framework和一个Workspace(项目+ pods)。我希望框架使用工作空间类(项目和pod)。然后,当我分发我的框架时,我需要它来引用上面的类。我怎么做?

2 个答案:

答案 0 :(得分:1)

您可以通过以这种方式编写podfile来创建包含所有这些工作区的新工作区:

workspace 'AllInOne.xcworkspace'
xcodeproj 'Workspace/Workspace.xcodeproj'
xcodeproj 'Framework/Framework.xcodeproj'

target 'ProjectA' do
  platform :ios, '8.0'
  xcodeproj 'Workspace/Workspace.xcodeproj'
  pod 'nameofpod', '~> .1'
end

target 'Framework' do
  platform :ios, '8.0'
  xcodeproj 'Framework/Framework.xcodeproj'
end

修改

创建一个新文件夹(名称为" AllInOne")。在该文件夹中放置您的框架文件夹,其中存在framework.xcodeproj,并放置您的工作区文件夹。 现在,在AllInOne文件夹中创建podfile。最后应该在这个目录中存在这些文件:

ALLINONE /工作区/ Workspace.xcodeproj

ALLINONE /框架/ Framework.xcodeproj

ALLINONE / podfile

ALLINONE / AllInOne.xcworkspace

答案 1 :(得分:1)

Cocoapods提供了向pod添加依赖性的方法。因此,例如我写的cocoapod可能要求项目安装最新的AFNetworking cocoapod。我还可以要求使用其他框架,例如CoreLocationCoreBluetooth等。

如果您将框架创建为cocoapod,则应该能够添加将在运行时添加的依赖项列表:

pod install

之前我已经创建了一个框架作为pod,并在我的podspec中使用了类似的东西:

s.source              =  { :git => ' <destination Git repo> ', :tag => '0.0.1' }
s.ios.xcconfig        =  { 'FRAMEWORK_SEARCH_PATHS' => '"$(PODS_ROOT)/<MyFrameWorkName>"' }
s.ios.preserve_paths  =  '<MyFrameWorkName>.framework'

然后您应该能够要求cocoapod具有其他依赖性,例如:

s.frameworks   = 'QuartzCore'

s.ios.weak_frameworks =  'CoreBluetooth'

s.dependency 'SDWebImage',                  '~> 3.7'
s.dependency 'GoogleAnalytics-iOS-SDK',     '3.0.3c'

现在,当您/其他人通过cocoapods安装您的框架时,他们将在项目中安装所需的一切。