바인딩을 Unified API로 마이그레이션

이 문서에서는 Xamarin.IOS 및 Xamarin.Mac 애플리케이션에 대한 통합 API를 지원하도록 기존 Xamarin 바인딩 프로젝트를 업데이트하는 데 필요한 단계를 설명합니다.

개요

2015년 2월 1일부터 Apple은 iTunes 및 Mac App Store에 대한 모든 새 제출이 64비트 애플리케이션이어야 합니다. 따라서 새 Xamarin.iOS 또는 Xamarin.Mac 애플리케이션은 기존 클래식 MonoTouch 및 MonoMac API 대신 새 통합 API를 사용하여 64비트를 지원해야 합니다.

또한 모든 Xamarin 바인딩 프로젝트는 64비트 Xamarin.iOS 또는 Xamarin.Mac 프로젝트에 포함할 새 통합 API도 지원해야 합니다. 이 문서에서는 통합 API를 사용하도록 기존 바인딩 프로젝트를 업데이트하는 데 필요한 단계를 설명합니다.

요구 사항

이 문서에 제시된 단계를 완료하려면 다음이 필요합니다.

  • Mac용 Visual Studio - 개발 컴퓨터에 설치되고 구성된 최신 버전의 Mac용 Visual Studio.
  • Apple Mac - iOS 및 Mac용 바인딩 프로젝트를 빌드하려면 Apple Mac이 필요합니다.

바인딩 프로젝트는 Windows 컴퓨터의 Visual Studio에서 지원되지 않습니다.

Using 문 수정

통합 API를 사용하면 Mac과 iOS 간에 코드를 보다 쉽게 공유할 수 있으며 동일한 이진 파일로 32비트 및 64비트 애플리케이션을 지원할 수 있습니다. 네임스페이 스에서 MonoMacMonoTouch 접두사를 삭제하면 Xamarin.Mac 및 Xamarin.iOS 애플리케이션 프로젝트에서 더 간단한 공유가 수행됩니다.

따라서 바인딩 계약(및 바인딩 프로젝트의 다른 .cs 파일)을 수정하여 문에서 using MonoMacMonoTouch 접두사를 제거해야 합니다.

예를 들어 바인딩 계약에서 다음 using 문을 사용할 수 있습니다.

using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using MonoTouch.ObjCRuntime;

접두사를 MonoTouch 제거하여 다음을 수행합니다.

using System;
using System.Drawing;
using Foundation;
using UIKit;
using ObjCRuntime;

다시 말하지만, 바인딩 프로젝트의 모든 .cs 파일에 대해 이 작업을 수행해야 합니다. 이 변경 내용이 적용되면 다음 단계는 새 네이티브 데이터 형식을 사용하도록 바인딩 프로젝트를 업데이트하는 것입니다.

통합 API에 대한 자세한 내용은 통합 API 설명서를 참조하세요. 32비트 및 64비트 애플리케이션 지원에 대한 자세한 배경 및 프레임워크에 대한 자세한 내용은 32비트 및 64비트 플랫폼 고려 사항 설명서를 참조하세요.

네이티브 데이터 형식으로 업데이트

Objective-C 는 데이터 형식을 NSIntegerint32_t 32비트 시스템과 64비트 시스템에 int64_t 매핑합니다. 이 동작과 일치하기 위해 새 통합 API는 이전 사용 int (.NET에서 항상 존재 System.Int32로 정의됨)을 새 데이터 형식 System.nint으로 바꿉니다.

통합 API는 새 nint 데이터 형식과 함께 형식 및 nfloat 형식에 대한 매핑 NSUInteger 도 도입 nuint 합니다CGFloat.

위의 내용을 고려하여 API를 검토하고 , 이전에 매핑int한 인스턴스 NSUIntegerNSIntegerCGFloat 있는지 확인하고, uintnuintnint형식 및 floatnfloat 형식으로 업데이트해야 합니다.

예를 들어 다음과 같은 메서드 정의가 Objective-C 제공됩니다.

-(NSInteger) add:(NSInteger)operandUn and:(NSInteger) operandDeux;

이전 바인딩 계약에 다음 정의가 있는 경우:

[Export("add:and:")]
int Add(int operandUn, int operandDeux);

새 바인딩을 다음과 같이 업데이트합니다.

[Export("add:and:")]
nint Add(nint operandUn, nint operandDeux);

처음에 연결했던 것보다 최신 버전 타사 라이브러리에 매핑하는 경우 라이브러리의 헤더 파일을 검토하고 .h 종료, 명시적 호출int, uint32_tfloatint32_tunsigned int또는 업그레이드된 NSIntegerNSUIntegerCGFloat항목이 있는지 확인해야 합니다. 이 경우 매핑에 대해서도 nintnuint 동일한 수정 및 nfloat 형식이 필요합니다.

이러한 데이터 형식 변경에 대한 자세한 내용은 네이 티브 형식 문서를 참조하세요.

CoreGraphics 형식 업데이트

실행되는 디바이스에 따라 32비트 또는 64비트 사용과 함께 CoreGraphics 사용되는 지점, 크기 및 사각형 데이터 형식입니다. Xamarin이 원래 iOS 및 Mac API를 바인딩할 때 데이터 형식 System.Drawing 과 일치하는 기존 데이터 구조를 사용했습니다(RectangleF 예: ).

64비트 및 새 네이티브 데이터 형식을 지원해야 하기 때문에 메서드를 호출 CoreGraphic 할 때 기존 코드를 다음과 같이 조정해야 합니다.

  • CGRect - 부동 소수점 사각형 영역을 정의하는 대신 RectangleF 사용합니다CGRect.
  • CGSize - 부동 소수점 크기(너비 및 높이)를 정의하는 대신 SizeF 사용합니다CGSize.
  • CGPoint - 부동 소수점 위치(X 및 Y 좌표)를 정의하는 대신 PointF 사용합니다CGPoint.

위의 경우 API를 검토하고 이전에 바인딩 RectangleFSizeFPointF 되었거나 네이티브 형식 CGRectCGPointCGSize 또는 CGPoint 직접 변경된 인스턴스 CGSizeCGRect가 있는지 확인해야 합니다.

예를 들어 다음의 이니셜라이저를 Objective-C 지정합니다.

- (id)initWithFrame:(CGRect)frame;

이전 바인딩에 다음 코드가 포함된 경우:

[Export ("initWithFrame:")]
IntPtr Constructor (RectangleF frame);

해당 코드를 다음으로 업데이트합니다.

[Export ("initWithFrame:")]
IntPtr Constructor (CGRect frame);

이제 모든 코드 변경 내용이 적용되었으므로 바인딩 프로젝트를 수정하거나 통합 API에 바인딩할 파일을 만들어야 합니다.

바인딩 프로젝트 수정

통합 API를 사용하도록 바인딩 프로젝트를 업데이트하는 마지막 단계로 프로젝트 또는 Xamarin 프로젝트 형식(Mac용 Visual Studio 내에서 바인딩하는 경우)을 수정 MakeFile 하고 클래식 API 대신 통합 API에 바인딩하도록 btouch에 지시해야 합니다.

MakeFile 업데이트

메이크파일을 사용하여 바인딩 프로젝트를 Xamarin .DLL 빌드하는 경우 명령줄 옵션을 포함하고 --new-style 대신 호출 btouch-nativebtouch해야 합니다.

따라서 다음을 지정합니다.MakeFile

BINDDIR=/src/binding
XBUILD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
PROJECT_ROOT=XMBindingLibrarySample
PROJECT=$(PROJECT_ROOT)/XMBindingLibrarySample.xcodeproj
TARGET=XMBindingLibrarySample
BTOUCH=/Developer/MonoTouch/usr/bin/btouch

all: XMBindingLibrary.dll

libXMBindingLibrarySample-i386.a:
	$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphonesimulator -configuration Release clean build
	-mv $(PROJECT_ROOT)/build/Release-iphonesimulator/lib$(TARGET).a $@

libXMBindingLibrarySample-arm64.a:
	$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch arm64 -configuration Release clean build
	-mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@

libXMBindingLibrarySample-armv7.a:
	$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build
	-mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@

libXMBindingLibrarySampleUniversal.a: libXMBindingLibrarySample-armv7.a libXMBindingLibrarySample-i386.a libXMBindingLibrarySample-arm64.a
	lipo -create -output $@ $^

XMBindingLibrary.dll: AssemblyInfo.cs XMBindingLibrarySample.cs extras.cs libXMBindingLibrarySampleUniversal.a
	$(BTOUCH) -unsafe -out:$@ XMBindingLibrarySample.cs -x=AssemblyInfo.cs -x=extras.cs --link-with=libXMBindingLibrarySampleUniversal.a,libXMBindingLibrarySampleUniversal.a

clean:
	-rm -f *.a *.dll

매크로 정의를 다음과 같이 조정하려면 btouch-native호출 btouch 에서 호출로 전환해야 합니다.

BTOUCH=/Developer/MonoTouch/usr/bin/btouch-native

호출 btouch 을 업데이트하고 다음과 같이 옵션을 추가 --new-style 합니다.

XMBindingLibrary.dll: AssemblyInfo.cs XMBindingLibrarySample.cs extras.cs libXMBindingLibrarySampleUniversal.a
	$(BTOUCH) -unsafe --new-style -out:$@ XMBindingLibrarySample.cs -x=AssemblyInfo.cs -x=extras.cs --link-with=libXMBindingLibrarySampleUniversal.a,libXMBindingLibrarySampleUniversal.a

이제 정상적으로 실행 MakeFile 하여 새 64비트 버전의 API를 빌드할 수 있습니다.

바인딩 프로젝트 형식 업데이트

Mac용 Visual Studio 바인딩 프로젝트 템플릿을 사용하여 API를 빌드하는 경우 바인딩 프로젝트 템플릿의 새 통합 API 버전으로 업데이트해야 합니다. 이 작업을 수행하는 가장 쉬운 방법은 새 통합 API 바인딩 프로젝트를 시작하고 모든 기존 코드 및 설정을 복사하는 것입니다.

다음을 수행합니다.

  1. Mac용 Visual Studio를 시작합니다.

  2. 파일>>솔루션 선택...

  3. 새 솔루션 대화 상자에서 iOS>통합 API>iOS 바인딩 프로젝트를 선택합니다.

    In the New Solution Dialog Box, select iOS / Unified API / iOS Binding Project

  4. '새 프로젝트 구성' 대화 상자에서 새 바인딩 프로젝트의 이름을 입력하고 확인 단추를 클릭합니다.

  5. 바인딩을 만들 64비트 버전의 Objective-C 라이브러리를 포함합니다.

  6. 기존 32비트 클래식 API 바인딩 프로젝트(예: ApiDefinition.csStructsAndEnums.cs 파일)에서 소스 코드를 복사합니다.

  7. 위에서 언급한 소스 코드 파일을 변경합니다.

이러한 모든 변경 내용을 적용하면 32비트 버전과 마찬가지로 새 64비트 버전의 API를 빌드할 수 있습니다.

요약

이 문서에서는 새 통합 API 및 64비트 디바이스를 지원하기 위해 기존 Xamarin 바인딩 프로젝트를 변경해야 하는 변경 내용과 새로운 64비트 호환 버전의 API를 빌드하는 데 필요한 단계를 보여 줍니다.