2017-02-07 8 views
2

신속한 프레임 워크를 만들고있어 프레임 워크에서 objective-c 클래스를 사용하고 싶습니다.objective-c와 swift를 섞어 코코아포드 프레임 워크를 만드는 방법

도서관을 만들려면 pod lib create frameworkName을 사용했습니다.

그것은 내 podspec 파일이다 : 나는 objc.h

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.m 파일. 이 Objc 클래스를 MyFramework.swift에 사용해야합니다.

표준 응용 프로그램 (프레임 워크가 아닌)에서 헤더 브리지를 만들고 objc.h 파일을 가져 오니 Objc 클래스에 액세스 할 수있었습니다.

여기서 Objc 클래스를 어떻게 사용할 수 있습니까?

어디서 objc.hobjc.m 파일을 넣어야합니까?

여기에 헤더 브리지를 만드는 방법은 무엇입니까?

답변

3

당신의 질문에 대답하기에는 조금 늦을 수도 있지만, 최근에 나는 당신과 같은 일을해야했습니다 - 일부 Objective C 코드가 혼합 된 Swift Framework의 코코아 포드를 만드십시오.

Xcode (8.2 이상 사용)에서 신속 기반 프레임 워크를 만들 때 대상과 동일한 이름의 우산 헤더 파일 (.h)이 생성됩니다. 따라서 프레임 워크 타겟이 'MyFrameworkTarget'이라면 Xcode가 추가하는 우산 헤더를 'MyFrameworkTarget.h'라고합니다. 이 헤더를 다른 Swift 및 Objective C 소스 코드 파일과 함께 코코아포드에 포함시키는 것이 중요합니다. 예를 들어

가 여기에 iOS 및 맥 OS 모두 대상으로하는 프레임 워크에 스위프트와 목표 C 소스 파일을 결합하는 작업 podspec 파일이 특정 예에서

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" => "[email protected]" } 

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 

을, 나는 스위프트와 목적을 가지고 COS 파일은 'Shared'폴더에 iOS 및 macOS 용으로 빌드 된 프레임 워크를 구성하고 's.source_files'에 의해 podspec에서 참조됩니다. 그런 다음 Xcode가 생성 한 두 프레임 워크 대상인 iOS (MyFrameworkMobile) 및 macOS (MyFrameworkMac)의 프레임 워크 우산 파일은 's.ios.source_files'및 's.osx.source_files'에서 참조되며, 각기. 내 예제에서는 두 개의 대상이 있기 때문에 iOS와 macOS는 별개입니다. 실제 헤더는 'MyFrameworkMobile'및 'MyFrameworkMac'폴더에 있습니다. 나는이 정보가 도움이되기를 바랍니다

MyFramework.podspec 
MyFramework.xcodeproj 

MyFrameworkMac 
    MyFrameworkMac.h 
    Info.plist 

MyFrameworkMobile 
    MyFrameworkMobile.h 
    Info.plist 

Shared 
    MyFramework.swift 
    MyFramework.h 
    MyFramework.m 

:

다음은 podspec가 가리키는 것을 시각화 내 실제 디스크상의 프로젝트 폴더 레이아웃입니다. GitHub에서 Swift 및 Objective C 파일의 혼합 프로젝트에 대한 pod 파일을 만드는 방법을 데모하는 훌륭한 샘플 프로젝트가 https://github.com/axl411/NVMDummyTestPod