【问题标题】:How to mix objective-c and swift to make a cocoapods framework如何混合objective-c和swift来制作cocoapods框架
【发布时间】:2017-06-24 05:40:42
【问题描述】:

我正在创建一个 swift 框架,我想在框架中使用一个 Objective-c 类。

我使用pod lib create frameworkName 创建库。

这是我的podspec 文件:

http://guides.cocoapods.org/syntax/podspec.html

Pod::Spec.new do |s|
s.name             = 'MyFramework'
s.version          = '0.1.0'
s.summary          = 'A short description of RadiantSensorsRSPOS.'

s.description      = <<-DESC
TODO: Add long description of the pod here.
                   DESC
s.license          = { :type => 'MIT', :file => 'LICENSE' }
s.ios.deployment_target = '8.0'

s.source_files = 'MyFramework/Classes/**/*'
s.public_header_files = 'Pod/Headers/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'CocoaAsyncSocket'
end

我有包含 Objc 类的 objc.hobjc.m 文件。我必须在MyFramework.swift 中使用这个Objc 类。

在标准应用程序(非框架)中,我创建了一个标头桥并导入了objc.h 文件,因此我可以访问Objc 类。

如何在这里使用Objc 类?

我应该把objc.hobjc.m文件放在哪里?

这里如何做头桥?

【问题讨论】:

    标签: objective-c swift frameworks cocoapods podspec


    【解决方案1】:

    我意识到回答你的问题可能有点晚了,但我最近不得不和你做同样的事情——创建一个 Swift 框架的 cocoapod,其中混合了一些 Objective C 代码。

    当您在 Xcode(我使用的是 8.2 或更高版本)中创建基于 Swift 的框架时,它会生成与目标同名的伞形头文件 (.h)。因此,如果您的框架目标称为“MyFrameworkTarget”,则 Xcode 添加的伞头文件称为“MyFrameworkTarget.h”。将此标头与其他 Swift 和 Objective C 源代码文件一起包含在您的 cocoapod 中很重要。

    例如,这里是一个工作 podspec 文件,它将 Swift 和 Objective C 源文件组合成一个同时针对 iOS 和 macOS 的框架:

    Pod::Spec.new do |s|
    
    s.name         = "MyFramework"
    s.version      = "1.0.0"
    s.summary      = "Example cocoapod spec for a mixed language framework"
    s.description  = <<-DESC
      Example cocoapod spec for a mixed language framework that targets both iOS and macOS.
    DESC
    
    s.homepage     = "https://github.com/username/MyFramework"
    
    s.license      = "Apache License, Version 2.0"
    
    s.author       = { "My Name" => "info@code.myname.com" }
    
    s.ios.deployment_target = "9.0"
    s.osx.deployment_target = "10.11"
    
    s.source       = { :git => "https://github.com/username/MyFramework.git", :tag => "#{s.version}" }
    
    s.source_files       = 'Shared/*.{swift,h,m}'
    s.ios.source_files   = 'MyFrameworkMobile/*.h'
    s.osx.source_files   = 'MyFrameworkMac/*.h'
    
    end
    

    在这个特定的示例中,我有 Swift 和 Objective C 文件,它们构成了为 iOS 和 macOS 构建的框架,位于“Shared”文件夹中,并在 podspec 中由“s.source_files”引用。然后在's.ios.source_files'和's.osx.source_files'中引用了Xcode生成并为我的两个框架目标iOS(我命名为MyFrameworkMobile)和macOS(我命名为MyFrameworkMac)编辑的框架伞文件,分别。在我的示例中,它们对于 iOS 和 macOS 是分开的,因为我有两个目标。实际的标头位于文件夹“MyFrameworkMobile”和“MyFrameworkMac”中。

    这是我实际的磁盘项目文件夹布局,以帮助可视化 podspec 指向的内容:

    MyFramework.podspec
    MyFramework.xcodeproj
    
    MyFrameworkMac
      MyFrameworkMac.h
      Info.plist
    
    MyFrameworkMobile
      MyFrameworkMobile.h
      Info.plist
    
    Shared
      MyFramework.swift
      MyFramework.h
      MyFramework.m
    

    我希望这些信息对您有所帮助。 GitHub 上有一个很好的示例项目,它演示了如何为 Swift 和 Objective C 文件的混合项目创建一个 pod 文件,地址为https://github.com/axl411/NVMDummyTestPod

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 2014-08-03
      • 2020-04-26
      相关资源
      最近更新 更多