Xcode 10 과 아이 폰 XS Max,아이 폰 XR 에 어 울 리 는 방법 지원

본 고 는 Xcode 10 과 아이 폰 XS Max,아이 폰 XR 을 지원 하 는 방법 을 소개 하 며 구체 적 으로 다음 과 같다.

현재 저희 프로젝트 는 Xcode 10(swift 4.0)과 새로운 기종 의 적합 을 만 들 었 습 니 다.문제 와 수정 내용 을 정리 하고 다른 사람 에 게 도움 을 주 십시오.만약 에 다른 견해 나 누락 이 있다 면 지적 해 주 십시오!
1.제3자 라 이브 러 리 컴 파일 오류
프로젝트 에 Mixpanel-swift 와 Swift Lint 가 사용 되 었 다 면 이 두 가 지 는 Xcode 10 에서 오 류 를 보고 할 수 있 습 니 다.현재 저 자 는 새로운 버 전 을 각각 2.4.5 와 0.27.0 으로 제출 했 습 니 다.업데이트 후 오 류 를 해결 할 수 있 습 니 다.
2.library not found for - lstdc++.6.0.9
pod 프로젝트 컴 파일 이 통 과 된 후 메 인 프로젝트 의 컴 파일 을 진행 합 니 다.libstdc+tbd 와 libstdc++.6.0.9.tbd 에 의존 하면 이 error 를 보고 합 니 다.이 이 유 는 애플 이 XCode 10 과 iOS 12 에서 libstdc++라 이브 러 리 를 제외 하고 libc+라 이브 러 리 에서 대 체 했 기 때 문 입 니 다.애플 의 설명 은 libstdc++가 폐 기 된 지 5 년 이 되 었 기 때 문 입 니 다.llvm 최 적 화 를 거 쳐 C++11 을 전면적으로 지원 하 는 libc++라 이브 러 리 를 사용 하 는 것 을 권장 합 니 다.
임시 적 인 해결 방법 은 libstdc++6.0.9.tbd 라 는 파일 을 Xcode 10 에 가 져 와 다음 디 렉 터 리/applications/Xcode.app/contents/developer/platforms/iPhone OS.platform/developer/SDKs/iPhone OS.sdk/usr/lib/  그리고/Applications/Xcode.app/Contents/developer/Platforms/iPhone Simulator.platform/developer/SDKs/iPhone Simulator.sdk/usr/lib/ 이때 컴 파일 은 통과 할 수 있다.
그러나 이것 은 임시 적 인 해결 방안 일 뿐 입 니 다.만약 에 자신의 업무 모듈 이 libstdc++를 사용 했다 면 모듈 코드 를 libc+에 의존 하 는 것 으로 재 조정 한 다음 에 문제 가 있 는 지 다시 확인 하고 다시 컴 파일 합 니 다.만약 당신 이 인용 한 제3자 업 체 가 제공 하 는 sdk 에서 libstdc++에 의존 했다 면 업 체 에 연락 하여 버 전 업 그 레이 드 를 요구 합 니 다.
3.Enum case '...' not found in type '...'
위의 두 개의 오 류 를 해결 하고 컴 파일 러 에 이 error 가 표 시 됩 니 다.구체 적 인 장면 은 다음 과 같 습 니 다.

PosVisitQuestionType: String {
  case text
  case textArea = "text_area"
  case dropDownList = "drop_down_list"
  case radioButton = "radio_button"
}
let type: PosVisitQuestionType!
...
switch type {
case .text, .textArea:
  errorText = NSLocalizedString("Please enter the following options", comment: "")
case .dropDownList, .radioButton:
  errorText = NSLocalizedString("Click the right button to get current location", comment: "")
default:
  break
}
Xcode 10 은 케이스 마다"?"를 추가 하 는 것 을 권장 합 니 다.

이 유 는 type 이 선택 할 수 있 기 때문에 모든 case 상황 은 type 유형 과 일치 해 야 하기 때문에 힌트 는"?"를 추가 합 니 다.Xcode 10 컴 파일 러 가 업 데 이 트 된 이유 일 수도 있 습 니 다.
수정 하 는 방법 은 type 이 할당 되 는 것 을 확인 하면 정의 할 때"!"제거,type 에 값 이 있 는 지 확인 되 지 않 으 면 Xcode 알림 에 따라 수정 합 니 다.
4.아이 폰 XS Max,아이 폰 XR 에 적합
저희 프로젝트 는 기종 등 정 보 를 얻 기 위해 DeviceKit 라 는 제3자 라 이브 러 리 를 사용 하기 때문에 업 데 이 트 를 해 야 새로운 기종 의 정 보 를 얻 을 수 있 습 니 다.최신 판 은 1.8.1 입 니 다.최신 판 에 이런 변수 가 있 습 니 다.

/// All Face ID Capable Devices
  static public var allFaceIDCapableDevices: [Device] {
   return [.iPhoneX, .iPhoneXs, .iPhoneXsMax, .iPhoneXr]
  }
아이 폰 X,아이 폰 XS,아이 폰 XS 맥 스,아이 폰 XR 등 모델 의 네 비게 이 션 바 높이 와 tabBar 높이 가 일치 하기 때문에 현재 기기 에'앞머리 맞 추기'가 있 는 지 를 allFaceidCapableDevices 로 판단 할 수 있다.
예시:

static let faceIDDeviceArray = Device.allFaceIDCapableDevices

static let navigationHeight: CGFloat = {
    if faceIDDeviceArray.contains(currentDevice) {
      return faceIDDeviceNavHeight
    } else {
      return ordinaryDeviceNavHeight
    }
  }()
또한 DeviceKit 에서 도 이러한 방법 을 제공 합 니 다.시 뮬 레이 터 를 실행 할 때 호출 되 고 실제 장치 이름 으로 돌아 갑 니 다.

/// Get the real device from a device. If the device is a an iPhone8Plus simulator this function returns .iPhone8Plus (the real device).
  /// If the parameter is a real device, this function returns just that passed parameter.
  ///
  /// - parameter device: A device.
  ///
  /// - returns: the underlying device If the `device` is a `simulator`,
  /// otherwise return the `device`.
  public static func realDevice(from device: DeviceKit.Device) -> DeviceKit.Device
예시:

static let currentDevice = Device.realDevice(from: Device())
if currentDevice == .iPhoneX {}
//       
if Device() == .iPhoneX || Device() == .simulator(.iPhoneX) {}
마지막 으로 시동 그림 두 장 을 더 자 르 는 것 을 잊 지 마 세 요.아이 폰 XS 와 사 이 즈 는 아이 폰 X 와 같 기 때문에 아이 폰 XS 는 무시 할 수 있 습 니 다.
iPhone XR:828px x 1792px
iPhone XS Max: 1242px x 2688px
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기