그래오늘은이거야

Swift4.2 IOS12 xcode10 Realm3.1 버전 error 잡기 RealmSwift Module compiled with Swift 4 cannot be imported in Swift 4.2 본문

세상 개발/IOS(Swift)

Swift4.2 IOS12 xcode10 Realm3.1 버전 error 잡기 RealmSwift Module compiled with Swift 4 cannot be imported in Swift 4.2

jinhongstar 2018. 10. 17. 17:49
728x90
반응형

안녕하세요.


이번에 설명드릴 것은 IOS10 이상으로 올렸더니 Realm 에서 오류가 발생했습니다.


버전업을 하던지 xcode 9 으로 버전으로 낮춰서 사용해야 한다는 듯한 문구입니다.



Module compiled with Swift 4 cannot be imported in Swift 4.2


2019-04-18

Swift5 가 나오면 아래와 같은 오류가 또발생

Module compiled with Swift 4.2 cannot be imported by the Swift 5.0 compiler




이런 문구가 나오면 아래와 같이 처리하면됩니다.



POD install 또는 POD update 하셔도 됩니다.


realM 을 업데이트 하셔도 됩니다.



stackoverflow에서 는 


carthage update --platform iOS

를 해보라고 하는데 일단 저는 프로젝트 소스는 pod install을 하지 않은,


lib만 적응한 버전임 말씀드립니다.



검색해본 결과 swift4.2 를 사용하려면 swiftRealm 버전을 업데이트 해야 합니다.


36




swiftRealm 업데이트 방법은


Dynamic Framework



버전이 바뀔때마다 새로운 버전을 받아야한다면

https://realm.io/kr/docs/swift/latest/


  1. Realm의 최신버전을 다운로드하고, zip 압축을 풉니다.
  2. Xcode 프로젝트에서 “General” 설정으로 이동합니다. ios/dynamic/osx/tvos/ 또는 watchos의 버전에 맞는 디렉터리에서 “Embedded Binaries” 부분으로 Realm.framework 를 옮깁니다. Copy items if needed를 선택했는지 확인하고(프로젝트에서 Realm을 여러 플랫폼에서 활용하는 경우는 제외) Finish 버튼을 누릅니다.
  3. 유닛 테스트 타깃의 “Build Settings” 탭 에서 “Framework Search Paths” 부분에 Realm.framework의 parent 경로를 추가하세요.
  4. iOS,tvOS 또는 watchOS 프로젝트에서 Realm을 사용한다면, 앱 타깃의 새 “Build Phases” 탭에서 “Run Script Phase”를 새로 생성하고 Script 텍스트 필드에 다음 코드를 붙여넣습니다.:
bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework/strip-frameworks.sh"

이 단계를 통해 universal binaries를 아카이빙할 때 발생하는 App Store submission bug를 해결할 수 있습니다.




CocoaPods


  1. CocoaPods 0.39.9 버전 또는 그 상위버전을 설치하세요.
  2. CocoaPods가 최신 Realm 버전을 인식할 수 있도록 pod repo update를 실행합니다.
  3. Podfile에 use_frameworks! 로 추가합니다. 그리고 응용 프로그램과 테스트 대상에 pod ‘RealmSwift’ 추가하십시오.
  4. 1.1.0 이전 버전의 CocoaPods를 사용한다면 Podfile 아래에 다음 코드를 붙여넣고, 필요한 경우 Swift 버전을 업데이트 하세요. ruby post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '3.0' end end end
  5. 커멘드 라인에서 pod install을 실행하세요.
  6. 프로젝트에서 CocoaPods 의해 만들어진 .xcworkspace 파일을 엽니다.




Carthage


  1. Carthage 0.17.0 버전 또는 그 상위버전을 설치하세요.
  2. github "realm/realm-cocoa"를 Cartfile에 추가합니다.
  3. carthage update를 실행합니다.
  4. Carthage/Build/ 내의 타깃 플랫폼 디렉터리의 RealmSwift.framework와 Realm.framework를 Xcode 프로젝트의 “General” 세팅의 “Linked Frameworks and Libraries” 영역으로 옮깁니다.
  5. iOS/watchOS/tvOS: application targets의 “Build Phases” 세팅 탭에서 “+” 아이콘을 누르고 “New Run Script Phase”를 선택한 후 아래처럼 Run Script를 생성합니다.

    /usr/local/bin/carthage copy-frameworks

    그리고 “Input Files”에 사용할 프레임워크의 경로를 추가합니다. 예를 들면:

    $(SRCROOT)/Carthage/Build/iOS/Realm.framework
    $(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework

    이 단계를 통해 universal binaries를 아카이빙할 때 발생하는 App Store submission bug를 해결할 수 있습니다.





출처 : https://realm.io/kr/docs/swift/latest/ 사이트에 접속해서...



또는 Realm swift 3.1 버전 다운로드












realm Swift 를 다운로드합니다.


다운로드한 lib 를 framewrok 에 적용합니다.


교체 해 주면됩니다.








xcode에 라이브러리를 교체 해 주면 swift4.2 에 대한 오류가 왕창 나올 것 입니다.


그중에 xcode에서 자동으로 버그를 수정해주는 것도 있지만 아래와 같이 수정을 안해주는 것도 있습니다.



NSNotification.Name.UIApplication.willEnterForegroundNotification

UIApplication.willEnterForegroundNotification


NSNotification.Name.UIResponder.keyboardWillChangeFrameNotification

UIResponder.keyboardWillChangeFrameNotification


NSNotification.Name.UIApplication.didEnterBackgroundNotification

UIApplication.didEnterBackgroundNotification


내일변경

UIInterfaceOrientationIsLandscape(UIApplication.shared.statusBarOrientation)

UIApplication.shared.statusBarOrientation.isLandscape


RunLoop.Mode.commonModes -> RunLoop.Mode.common


UIActivityIndicatorView.Style = .whiteLarge leo.park swift 4.2

activityIndicateView!.style = UIActivityIndicatorView.Style.whiteLarge


.AVAudioSession.interruptionNotification

AVAudioSession.interruptionNotification(.제거)



 let audioSession = AVAudioSession.sharedInstance()

        do {

            

            if #available(iOS 10.0, *) {

                try audioSession.setCategory(AVAudioSession.Category.playback, mode: .default)

                try audioSession.setActive(true)

            } else {

                // Workaround until https://forums.swift.org/t/using-methods-marked-unavailable-in-swift-4-2/14949 isn't fixed

                audioSession.perform(NSSelectorFromString("setCategory:error:"), with: AVAudioSession.Category.playback)

            }

            

            

            

        } catch {

            print("Unable to set audio session category")

        }



제가 이 버그때문에 하루를 날려먹었어요 ㅠㅠ


혹시 궁금한게 있으면 물어보세요~



반응형
Comments