2016-12-23 1 views
1

I의 발 빠른 프레임 워크의 구조는 다음과 같습니다 불행하게도목표 - C 코드 스위프트 - 프레임 워크 내부

FrameworkA 
├── FrameworkA.swift 
└── Objective-C 
    ├── ClassA.h 
    └── ClassA.m 

, 나는 FrameworkA.swiftClassA에 액세스 할 수 없습니다; 오류는 다음과 같습니다 해결되지 않은 식별자의

사용 '를 ClassA'

ClassA 보호해야/프레임 워크 내부.

내가 뭘 잘못하고 있니?

답변

3

으로 로 스위프트 코드를 같은 프레임 워크 대상에서 목표 - C 파일 세트를 가져 오려면 스위프트에

을 목표 - C를 가져 오기 Apple Docs

당, 당신은해야합니다 이러한 파일을 프레임 워크 용 Objective-C 우산 헤더로 가져옵니다.

확실히 그 프레임 워크 목표에 대한 정의 모듈 설정이 "Yes"로 설정되어 있는지 확인, 포장에, 빌드 설정에서 같은 프레임 워크

에서 스위프트에 목표 - C 코드를 가져옵니다. 우산 헤더 파일에서 노출시킬 모든 Objective-C 헤더를 Swift로 가져옵니다. 예를 들어 공개적으로 노출하지 않고 스위프트 파일의 목표 - C 클래스를 참조 할 수있는 방법이없는 것처럼

#import <XYZ/XYZCustomCell.h> 
#import <XYZ/XYZCustomView.h> 
#import <XYZ/XYZCustomViewController.h> 

그래서, 공식적으로, 그것은 보인다. ☹️

+0

.h 프레임 워크 파일에서 가져 오기는 내부에 있기를 원하기 때문에 옵션이 아닙니다. –

+0

사실 예. 모든 Objective-C 파일을 공용으로 만들어야하는 경우 프레임 워크가 더 이상 적합하지 않습니까? :-) –

+0

코드를 안전하게 유지하려면 먼저 Objective-C를 사용하지 않아야합니다. 클래스 덤프를 수행하면 정적 라이브러리로 링크하더라도 모든 인터페이스가 표시됩니다. 최소한의 보안을 유지하는 유일한 방법은 C, C++ 또는 Swift로 작성하여 메인 라이브러리에 정적 라이브러리로 추가하는 것입니다. 그런 다음 모든 기호를 제거하고 더 안전하게 만들 수 있습니다. 만약 당신이 당신의 코드에서 호퍼 디스어셈블러를 사용하여 테스트하고 싶다면 내 말이 무슨 뜻인지 알게 될 것입니다. 또한 Steve Nygard의 클래스 덤프 유틸리티를 사용해보십시오. 코드가 노출되는 방법을 알 수 있습니다. – jvarela

관련 문제