Podfile中对单一目标的多平台支持

时间:2019-01-07 13:23:54

标签: ios objective-c xcode frameworks cocoapods

是否可以通过podfile为单个目标添加多个平台支持?

例如,我的项目在iOS和Mac上都是通用的。它们使用相同的代码库。因此,我没有为同一代码创建多个目标,而是在同一目标中添加了对iOS和MacOSX的支持。一切正常。

现在,我想通过Cocoapods添加一个依赖项。我创建一个podfile并指定目标对pod的依赖。这里讨论的Pod以类似的方式支持多个平台,即单个目标。

但是现在在构建我的项目时,它在iOS上失败。

在Podfile中为单个目标指定多个平台会产生错误。

如果我仅将平台指定为iOS或Mac,则该项目无法在其他平台上构建。

有人曾经历过吗? 如何通过podfile为单个目标添加多个平台?

P.S。 -我知道我可以通过在项目中创建多个目标来实现这一目标。但我想保留它作为最后的选择。

3 个答案:

答案 0 :(得分:3)

def import_pods

pod 'CorePlot'

end

target 'FirstAppWithMacOS' do
    # define your platform here.
    platform :ios, '9.0'
    import_pods
end

target 'FirstMacOSApp' do
    # define your platform here.
    platform :osx, '10.10'
    import_pods
end

请参见下面的项目图片:

enter image description here

答案 1 :(得分:0)

平台设备由目标的Base SDK的{​​{1}}部分中的Supported PlatformsArchitectures控制。如果您没有为macOS和iOS设备创建分离的两个目标,则应该只剩下一个选择来支持这些平台条目,即,为macOS平台复制两个新的现有构建配置,那么您可以配置设置。

例如,您有一个现有的基于iOS的项目,并且有两个名为Build SettingsDebug的默认构建配置。现在尝试为macOS新建两个,选择主Xcode项目->选择项目名称(此处不是目标名称)->选择信息顶部部分->点击Release部分下的+按钮->选择Configurations->将其重命名为Duplicate "Debug"/"Release" Configuration / Debug-macOS或其他名称,将其重命名也从Release-macOS / DebugRelease / Debug-iOS

现在,您只有两对配置,可以在一个目标的构建设置下调试和归档目标平台。您还可以为macOS开发创建新方案,只需确保以不同的操作选择正确的配置即可。

Release-iOS上的主要Podfile对话,如果您自己维护一个cocoapods库,并且希望将其添加为依赖项,则最好在{中同时支持macOS和iOS平台{1}}文件,当然,您需要与这些平台兼容,AFNetworking就是这样做的。这是主要的转换任务,对于macOS平台,请勿在{{1​​}}下使用任何API。要区分平台在编译时间上的差异,可以为此使用这些宏,

cocoapods

如果您想在独立项目目标中使用第三方库,请首先检查兼容问题,如果它仅适用于iOS平台,则可以仅为一个平台指定依赖库,

podspec

与macOS支持相同。

希望有帮助!

答案 2 :(得分:-2)

在我的一个有3个目标的项目中,我执行了相同的实现。 我已经创建了“ def”共享吊舱,然后在所有3个目标中都调用了shared_pods。这样,它工作得很好。我只为iOS应用程序做过。

# Uncomment the next line to define a global platform for your project
 platform :ios, '9.0'

def shared_pods
    pod 'Stripe'
    pod 'Google/SignIn'
end

target 'App_Dev' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

    shared_pods
 end

target 'App_QA' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

    shared_pods
 end


target 'App_Release' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

    shared_pods
 end