MSLibrary。 Xcodeでのクロスプラットフォヌムナニバヌサルラむブラリの䜜成ずコンパむル

iOSラむブラリのMSLibraryの開発者チヌムによる別の蚘事は、クロスプラットフォヌムラむブラリの䜜成ずコンパむルずいうかなり䞀般的なトピックに圓おられおいたす。

ラむブラリは、以前に開発したプログラムコヌドをさたざたなプログラムで䜿甚できるずいう点で優れおいたす。 したがっお、プログラマは、暙準機胜の䞀郚ずしおラむブラリの䞀郚である既補の゜リュヌションを䜿甚するこずにより、䜜業を倧幅に簡玠化し、実行時間を短瞮できたす。 この蚘事では静的ラむブラリのみが考慮され、そのコヌドはコンパむル時に実行可胜ファむルに完党に含たれおいるため、プログラムを簡単に移怍できたす。

ラむブラリを「れロから」䜜成し、すでに完了したプロゞェクトの機胜の䞀郚をラむブラリに組み蟌むこずを考慮しお、問題をより詳现か぀䜓系的にカバヌしようずしたした。 クロスプラットフォヌムたたは汎甚性ずは、i386たたはx86_64アヌキテクチャヌのプロセッサヌ䞊で実行されおいるシミュレヌタヌず、実際のデバむスずのラむブラリヌの互換性を意味したす。

1.ラむブラリプロゞェクトを䜜成する


ラむブラリを開発する堎合、開発者は2぀の方法を䜿甚できたす。1぀目-ラむブラリをれロから䜜成する方法、2぀目-ラむブラリを䜜成するベヌスずなる機胜がプロゞェクトにありたす。 䞡方を怜蚎しおください。

図曞通䜜成「れロから」

アクションのシヌケンスは、新しいプロゞェクトを䜜成するずきず同じです。

	ファむル>新芏>プロゞェクト...
	 iOS>フレヌムワヌクずラむブラリ> Cocoa Touch Static Library
	名前を蚭定したす䟋-MySecretLibrary

これを行う方法の詳现に぀いおは、こちらをご芧ください↓
ステップ1 ファむル>新芏>プロゞェクト...


図 1-1

ステップ2  Cocoa Touch Static Libraryの遞択


図 1-2

ステップ3 ラむブラリヌ名補品名の割り圓お...


図 1-3


プロゞェクトりィンドりは次のようになりたす。

図1-4

別のプロゞェクトの機胜郚から䜜成されたラむブラリ

既補のMyAppプロゞェクトがあり、それに含たれるいく぀かのクラスに基づいおラむブラリを䜜成するずしたす。 プロゞェクトりィンドりは次のようになりたす。


図 2-0

静的ラむブラリの新しいタヌゲットを䜜成したす。
アクションのシヌケンスは、新しいラむブラリを最初から䜜成するずきのシヌケンスに䌌おいたす。

	ファむル>新芏> Targect ...
	 iOS>フレヌムワヌクずラむブラリ> Cocoa Touch Static Library
	名前を蚭定したす䟋-MySecretLibrary

これを行う方法の詳现に぀いおは、こちらをご芧ください↓
ステップ1 ファむル>新芏>タヌゲット...


図 1-1

ステップ2  Cocoa Touch Static Libraryの遞択


図 1-2

ステップ3 ラむブラリヌ名補品名の割り圓お...


図 1-3


プロゞェクトりィンドりは次のようになりたす。


図 1-4

MySecretLibraryファむルを含む新しいタヌゲットずフォルダヌがプロゞェクトに衚瀺されたこずがわかりたす。

2.ラむブラリアヌキテクチャを構成する


デフォルトでは、アプリケヌション構成にはarmv7およびarm64のアセンブリが含たれおいたす。 armv7siPhone 5、iPhone 5c、iPad 2012甚を远加できたす。たずえば、armv6ずi386も远加できたす。 それはすべお、ラむブラリが動䜜するはずのプラットフォヌムに䟝存したす。
参考たでに。 過去のさたざたなAppleデバむスで䜿甚されおいるプラ​​ットフォヌムの衚


図 5

3.ビルドフェヌズの構成


コンパむルファむルの远加

	ビルドフェヌズ> Complite゜ヌス

デフォルトでは、MySecretLibrary.mファむルがコンパむル甚に含たれおいたす。 私たちのタスクは、ナヌティリティ調達ファむル.h、リ゜ヌスなどを含む、ラむブラリが機胜するために必芁なすべおのファむルを远加するこずです。


図 6-1

ヘッダヌファむルの远加

	ビルドフェヌズ>ファむルのコピヌ

デフォルトでは、ファむルMySecretLibrary.hが含たれおいたす。 ラむブラリを新しいプロゞェクトに接続するために必芁なすべおのヘッダヌファむルを远加する必芁がありたす。

各ラむブラリには、このラむブラリに含たれるすべおの関数のプロトタむプ宣蚀を蚘述するヘッダヌファむルが必芁であるこずを思い出しおください。 ラむブラリはヘッダヌファむルを䜿甚しお、プログラムコヌドにその䞭に存圚する関数ずその䜿甚方法を䌝えたす。
重芁 さたざたなクラスず関数の宣蚀を含むヘッダヌファむルがいく぀かある堎合、それらをすべお別々に新しいプロゞェクトに接続するこずは望たしくありたせん。 ラむブラリの1぀の芋出しファむルを䜜成し、他のすべおのファむルをそれに接続するず䟿利です。 たずえば、Foundationなどの暙準フレヌムワヌクのヘッダヌファむルは次のようになりたす。
財団ヘッダヌ
/* Foundation.h Copyright (c) 1994-2015, Apple Inc. All rights reserved. */ #include <CoreFoundation/CoreFoundation.h> #import <Foundation/NSObjCRuntime.h> #import <Foundation/NSArray.h> #import <Foundation/NSAutoreleasePool.h> #import <Foundation/NSBundle.h> #import <Foundation/NSByteOrder.h> #import <Foundation/NSCalendar.h> #import <Foundation/NSCharacterSet.h> #import <Foundation/NSCoder.h> #import <Foundation/NSData.h> #import <Foundation/NSDate.h> #import <Foundation/NSDateFormatter.h> #import <Foundation/NSDateIntervalFormatter.h> #import <Foundation/NSMassFormatter.h> #import <Foundation/NSLengthFormatter.h> #import <Foundation/NSEnergyFormatter.h> #import <Foundation/NSPersonNameComponents.h> #import <Foundation/NSPersonNameComponentsFormatter.h> #import <Foundation/NSDecimal.h> #import <Foundation/NSDecimalNumber.h> #import <Foundation/NSDictionary.h> #import <Foundation/NSEnumerator.h> #import <Foundation/NSError.h> #import <Foundation/NSException.h> #import <Foundation/NSFileHandle.h> #import <Foundation/NSFileManager.h> #import <Foundation/NSFormatter.h> #import <Foundation/NSHashTable.h> #import <Foundation/NSHTTPCookie.h> #import <Foundation/NSHTTPCookieStorage.h> #import <Foundation/NSIndexPath.h> #import <Foundation/NSIndexSet.h> #import <Foundation/NSInvocation.h> #import <Foundation/NSJSONSerialization.h> #import <Foundation/NSKeyValueCoding.h> #import <Foundation/NSKeyValueObserving.h> #import <Foundation/NSKeyedArchiver.h> #import <Foundation/NSLocale.h> #import <Foundation/NSLock.h> #import <Foundation/NSMapTable.h> #import <Foundation/NSMethodSignature.h> #import <Foundation/NSNotification.h> #import <Foundation/NSNotificationQueue.h> #import <Foundation/NSNull.h> #import <Foundation/NSNumberFormatter.h> #import <Foundation/NSObject.h> #import <Foundation/NSOperation.h> #import <Foundation/NSOrderedSet.h> #import <Foundation/NSOrthography.h> #import <Foundation/NSPathUtilities.h> #import <Foundation/NSPointerArray.h> #import <Foundation/NSPointerFunctions.h> #import <Foundation/NSPort.h> #import <Foundation/NSProcessInfo.h> #import <Foundation/NSPropertyList.h> #import <Foundation/NSProxy.h> #import <Foundation/NSRange.h> #import <Foundation/NSRegularExpression.h> #import <Foundation/NSRunLoop.h> #import <Foundation/NSScanner.h> #import <Foundation/NSSet.h> #import <Foundation/NSSortDescriptor.h> #import <Foundation/NSStream.h> #import <Foundation/NSString.h> #import <Foundation/NSTextCheckingResult.h> #import <Foundation/NSThread.h> #import <Foundation/NSTimeZone.h> #import <Foundation/NSTimer.h> #import <Foundation/NSURL.h> #import <Foundation/NSURLAuthenticationChallenge.h> #import <Foundation/NSURLCache.h> #import <Foundation/NSURLConnection.h> #import <Foundation/NSURLCredential.h> #import <Foundation/NSURLCredentialStorage.h> #import <Foundation/NSURLError.h> #import <Foundation/NSURLProtectionSpace.h> #import <Foundation/NSURLProtocol.h> #import <Foundation/NSURLRequest.h> #import <Foundation/NSURLResponse.h> #import <Foundation/NSUserDefaults.h> #import <Foundation/NSValue.h> #import <Foundation/NSValueTransformer.h> #import <Foundation/NSXMLParser.h> #import <Foundation/NSZone.h> #import <Foundation/FoundationErrors.h> #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE) #import <Foundation/NSAttributedString.h> #import <Foundation/NSByteCountFormatter.h> #import <Foundation/NSCache.h> #import <Foundation/NSComparisonPredicate.h> #import <Foundation/NSCompoundPredicate.h> #import <Foundation/NSDateComponentsFormatter.h> #import <Foundation/NSExpression.h> #import <Foundation/NSExtensionContext.h> #import <Foundation/NSExtensionItem.h> #import <Foundation/NSExtensionRequestHandling.h> #import <Foundation/NSFileCoordinator.h> #import <Foundation/NSFilePresenter.h> #import <Foundation/NSFileVersion.h> #import <Foundation/NSFileWrapper.h> #import <Foundation/NSItemProvider.h> #import <Foundation/NSLinguisticTagger.h> #import <Foundation/NSMetadata.h> #import <Foundation/NSMetadataAttributes.h> #import <Foundation/NSNetServices.h> #import <Foundation/NSPredicate.h> #import <Foundation/NSProgress.h> #import <Foundation/NSUbiquitousKeyValueStore.h> #import <Foundation/NSUndoManager.h> #import <Foundation/NSURLSession.h> #import <Foundation/NSUserActivity.h> #import <Foundation/NSUUID.h> #endif #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || TARGET_OS_WIN32 #import <Foundation/NSArchiver.h> #import <Foundation/NSBackgroundActivityScheduler.h> #import <Foundation/NSCalendarDate.h> #import <Foundation/NSConnection.h> #import <Foundation/NSDistantObject.h> #import <Foundation/NSDistributedNotificationCenter.h> #import <Foundation/NSGeometry.h> #import <Foundation/NSPortCoder.h> #import <Foundation/NSPortMessage.h> #import <Foundation/NSPortNameServer.h> #import <Foundation/NSProtocolChecker.h> #import <Foundation/NSTask.h> #import <Foundation/NSXMLDTD.h> #import <Foundation/NSXMLDTDNode.h> #import <Foundation/NSXMLDocument.h> #import <Foundation/NSXMLElement.h> #import <Foundation/NSXMLNode.h> #import <Foundation/NSXMLNodeOptions.h> #import <Foundation/NSURLDownload.h> #import <Foundation/NSURLHandle.h> #endif #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) #import <Foundation/NSAffineTransform.h> #import <Foundation/NSAppleEventDescriptor.h> #import <Foundation/NSAppleEventManager.h> #import <Foundation/NSAppleScript.h> #import <Foundation/NSClassDescription.h> #import <Foundation/NSDistributedLock.h> #import <Foundation/NSGarbageCollector.h> #import <Foundation/NSHFSFileTypes.h> #import <Foundation/NSHost.h> #import <Foundation/NSObjectScripting.h> #import <Foundation/NSScriptClassDescription.h> #import <Foundation/NSScriptCoercionHandler.h> #import <Foundation/NSScriptCommand.h> #import <Foundation/NSScriptCommandDescription.h> #import <Foundation/NSScriptExecutionContext.h> #import <Foundation/NSScriptKeyValueCoding.h> #import <Foundation/NSScriptObjectSpecifiers.h> #import <Foundation/NSScriptStandardSuiteCommands.h> #import <Foundation/NSScriptSuiteRegistry.h> #import <Foundation/NSScriptWhoseTests.h> #import <Foundation/NSSpellServer.h> #import <Foundation/NSUserNotification.h> #import <Foundation/NSUserScriptTask.h> #import <Foundation/NSXPCConnection.h> #endif 



図 6-2

既補のアプリケヌションからラむブラリを䜜成する堎合、同じ手順を実行しおビルドフェヌズを構成する必芁がありたす。 Compliteサワヌおよびファむルのコピヌには、同じ名前のタヌゲットによっお䜜成されたMySecretLibraryグルヌプのファむルだけでなく、アプリケヌションの他のリ゜ヌスも含めるこずができるこずを理解しおください。 MySecretLibraryグルヌプは、たずえば、アプリケヌションの特定のクラスず機胜のみをそこにあるファむルに転送するなど、操䜜する機䌚を䞎えるためにのみ䜜成されたす。 Xcodeのコンパむル時に、この特定のタヌゲットのビルドフェヌズで指定されたファむルのみを䜿甚するこずを思い出しおください。 ぀たり、䞊蚘の䟋では、MySecretLibraryフォルダヌのファむルのみがコンパむルされたす。

原則ずしお、この段階で、すべおの準備䜜業が完了し、図曞通の組み立おを開始できたす...しかし、埮劙な点が1぀ありたす。 実際、Xcodeは、コンピュヌタヌで実行されおいるシミュレヌタヌのアヌキテクチャヌi386たたはx86_64のプロセッサヌ、たたはプロセッサヌがアヌキテクチャヌarmv7、armv7sたたはarmv64を備えおいる可胜性が高いデバむスのいずれかの珟圚の蚭定に基づいお補品をコンパむルしたす。 したがっお、シミュレヌタ甚にコンパむルされたラむブラリは実際のデバむスでは機胜したせん。逆の堎合、デバむス甚にコンパむルされたラむブラリはシミュレヌタでは機胜したせん。

シミュレヌタヌ甚のコンパむル

ラむブラリタヌゲットを「アクティブスキヌム」ずしお蚭定-MySecretLibrary、MySecretLibrary> iPhone 6sなどのシミュレヌタヌを遞択したす


図 7-1

そしおBを抌しおラむブラリプロゞェクトをコンパむルしたす。

結果は写真のようになりたす。


図 7-2

赀のファむル名libMySecretLibrary.aが黒に倉わったこず、぀たり、コンパむルが成功し、ファむルがコンピュヌタヌに保存されたこずに泚意しおください。 右クリックするず、メニュヌが衚瀺され、[Finderに衚瀺]項目を遞択したす。


図 7-3

開いたりィンドりに、ラむブラリファむル-libMySecretLibrary.aおよび調達ファむル-MySecretLibrary.hがあるDebug-iphonesimulatorフォルダヌが衚瀺されたす。


図 7-4

䞊蚘のフォルダヌに移動するず、シミュレヌタヌ甚に収集されたラむブラリヌのフォルダヌがProductsフォルダヌにあるこずが明確になりたす。


図 7-5

この堎合のDebug-iphonesimulatorフォルダヌぞのフルパス

 /ナヌザヌ/ [userName] /ラむブラリ/開発者/ Xcode / DerivedData / MySecretLibrary-esufqblgaisjjeecltzoxyiyogzj /ビルド/補品/ Debug-iphonesimulator

デバむス甚のコンパむル

ラむブラリタヌゲットを「アクティブスキヌム」ずしお蚭定したす-MySecretLibrary、「Generic iOS Device」MySecretLibrary> Generic iOS Deviceを遞択したす


図 8-1

そしおBを抌しおラむブラリプロゞェクトをコンパむルしたす。


図 8-2

「Finderで衚瀺」を遞択したす。


図 8-3

ラむブラリフォルダヌに移動したす。 前のものず䌌おいたすが、ラむブラリファむルlibMySecretLibrary.aはデバむスのアヌキテクチャ甚にコンパむルされおいたす。


図 8-4

補品フォルダは次のようになりたす。


図 8-5

この堎合のDebug-iphoneosフォルダヌぞのフルパス

 /ナヌザヌ/ [userName] /ラむブラリ/開発者/ Xcode / DerivedData / MySecretLibrary-esufqblgaisjjeecltzoxyiyogzj /ビルド/補品/ Debug-iphoneos

Productsフォルダには、シミュレヌタ甚ずデバむス甚の2぀のラむブラリがあるこずがわかりたす。

次のステップは、ラむブラリの䞡方のバヌゞョンを結合する1぀のバむナリファむルを䜜成するこずです。

4.ナニバヌサルバむナリファむルを生成する


ナニバヌサルバむナリファむルを䜜成するためのオプションはかなりありたすが、すべおの堎合、本質は3぀の連続したアクションに芁玄されたす。
-デバむス甚のラむブラリを生成したす
-シミュレヌタヌ甚のラむブラリヌを生成する
-ラむブラリを結合し、lipoコマンドを䜿甚しおバむナリファむルを䜜成したす

興味のある方のために、リポ↓コマンドの詳现を説明したす。
リポ
ナニバヌサルファむルを䜜成たたは操䜜したすナニバヌサルバむナリを単䞀のアヌキテクチャファむルに、たたはその逆に倉換したす。
構文
       lipo [input_file] ... [-arch arch_type input_file] ... [-arch_blank arch_type] ...
               {-info |  -detailed_info}
                  [-output output_file]操䜜
                     [-segalign arch_type倀]

         Operationは次のいずれかです。
            [-create] [-arch_blank arch_type]
            [-thin arch_type]
            [-extract arch_type] ...
            [-extract_family arch_type] ...
            [-remove arch_type] ...
            [-replace arch_type file_name] ...
            [-verify_arch arch_type ...]

オプション
    -info入力ナニバヌサルファむルのアヌキテクチャタむプを簡単にリストしたす。
          各アヌカむブの名前をリストしたす。

    -detailed_info
          入力ナニバヌサルファむルのアヌキテクチャタむプの詳现なリストを衚瀺したす。
          汎甚ヘッダヌ情報をリストしたす。 ファむル内のアヌキテクチャごずに。

    -arch arch_type input_file
           input_fileに指定されたアヌキテクチャタむプが含たれおいるこずをlipoに䌝えたす。 
           input_fileがオブゞェクトファむル、ナニバヌサルファむルの堎合、これは䞍芁です。
          たたは、アヌキテクチャヌ耇数可リポが把握できる他のファむル。

    -arch_blank arch_type
          指定されたarch_typeの出力は、MH_DYLIB_STUBファむルになりたす。
          このフラグは、-create以倖の操䜜では䜿甚できたせん。

    -output output_file
          出力ファむル。

    -䜜成
          入力ファむルから1぀のナニバヌサル出力ファむルを䜜成したす。

    -thin arch_type
           1぀の入力ファむルを取埗し、指定されたarch_typeを䜿甚しおシン出力ファむルを䜜成したす。

    -arch_type file_nameを眮き換えたす
           1぀のナニバヌサル入力ファむルを取埗したす。 出力ファむルで、arch_typeの内容を眮き換えたす 
          入力ファむルず指定されたfile_nameの内容。

    -arch_typeを削陀
           1぀のナニバヌサル入力ファむルを取埗し、そのナニバヌサルファむルからarch_typeを削陀したす。 
          結果を出力ファむルに配眮したす。

    -extract arch_type
           1぀のナニバヌサル入力ファむルを取埗し、そのナニバヌサルファむルからarch_typeを 
          そのアヌキテクチャのみを含むナニバヌサル出力ファむル。

    -extract_family arch_type
           1぀の汎甚入力ファむルを取埗し、そのファミリのすべおのarch_typesをコピヌしたす
           arch_typeは、そのナニバヌサルファむルから、それらのみを含む出力ファむルになりたす
          アヌキテクチャ。 アヌキテクチャが1぀だけ芋぀かった堎合、ファむルは薄くなりたす。

    -verify_arch arch_type ...
           1぀の入力ファむルを取埗し、指定されたarch_typesがファむルに存圚するこずを確認したす。 
          その堎合は、ステヌタス0で終了し、そうでない堎合はステヌタス1で終了したす。

    -segalign arch_type倀
          ナニバヌサルファむルを䜜成するずきに、指定されたarch_typeのセグメントアラむンメントを蚭定したす 
          そのアヌキテクチャを含む。 倀は16進数であり、 
          æ•Žæ•°2の环乗。これは、リポがアラむメントを把握できない堎合にのみ必芁です。 
          入力ファむル珟圚はオブゞェクトファむルではありたせん、たたは
          あたりにも保守的に敎列。  lipoが認識しないファむルのデフォルトは0です
           2 ^ 0、たたは1バむトのアラむメント、およびアヌカむブのデフォルトのアラむメント 
           42 ^ 2、たたは4バむトのアラむメントです。

 arch_typeサポヌトされおいるアヌキテクチャ名i38632ビットIntelppc32ビットpowerpc
           ppc6464ビットpowerpcたたはx86_6464ビットIntel
 lipoは1぀の出力ファむルを生成し、入力ファむルを倉曎したせん。
リポは次のこずができたすナニバヌサルファむルにアヌキテクチャタむプをリストしたす。  1぀以䞊の入力ファむルから単䞀のナニバヌサルファむルを䜜成したす。 単䞀のナニバヌサルファむルを指定された1぀のアヌキテクチャタむプに間匕きたす。 入力ファむルからアヌキテクチャタむプを抜出、眮換、削陀しお、単䞀の新しいナニバヌサル出力ファむルを䜜成したす。
䟋
 $ cd /アプリケヌション
 $ lipo Stickies.app/Contents/MacOS/Stickies -info

 $ lipo Stickies.app/Contents/MacOS/Stickies -thin i386 -output Stickies.app/Contents/MacOS/Stickies.i386
 $ cd Stickies.app/Contents/MacOS/
 $ rmスティッキヌズ
 $ mv Stickies.i386スティッキヌズ


さたざたなコマンドコマンドラむンの詳现に぀いおは、SS64.comをご芧ください。

ナニバヌサルバむナリラむブラリファむルの䜜成

-デバむス甚のラむブラリをコンパむルしたす䞊蚘のずおり
-シミュレヌタヌ甚のラむブラリヌをコンパむルしたす䞊蚘のずおり
-オヌプンタヌミナル
-タヌミナルの補品フォルダヌに移動したすcdコマンドずフォルダヌパス
-次のテキストを入力したす。

 lipo -create Debug-iphoneos/libMySecretLibrary.a Debug-iphonesimulator/libMySecretLibrary.a -output libMySecretLibrary_combined.a 

その結果、ナニバヌサルフォルダヌファむルlibMySecretLibrary_combined.aがProductsフォルダヌに保存されたす。 ヘッダヌファむルは、Debug-iphoneosたたはDebug-iphonesimulatorフォルダヌから䜿甚できたす。


図 9-0

圓然、libMySecretLibraryの代わりに、コヌドでラむブラリの名前を䜿甚する必芁がありたす。

実際、タスクは完了しおいたす。 ただし、Xcodeは倚くのプロセスを自動化するツヌルを提䟛したす。特に、Aggregateタヌゲットを䜿甚しおラむブラリの䜜成ずアセンブリを自動化できたす。

プロゞェクトに新しいタヌゲットを远加-集蚈

Xcodeには、必芁ではない特別なタヌゲティングパタヌンがありたす
特定のタむプの補品に察応したす。 これらは、以䞋に䜿甚できる特別な集玄タヌゲットです。
-タヌゲットグルヌプの関連付け
-ファむルシステムの特定の堎所にファむルをコピヌする
-倖郚ビルドシステムを䜿甚した補品の䜜成
-コマンドスクリプトを実行する

この堎合、 コマンドスクリプトを実行するためのタヌゲットを䜜成したす。このスクリプトを䜿甚しお、シミュレヌタ甚ずデバむス甚の2぀のレむダヌを組み合わせたナニバヌサルラむブラリをアセンブルしたす。

アクションのシヌケンスは、他のタヌゲットを远加する堎合ず同じです。

	ファむル>新芏> Targect ...
	その他OS Xの䞀番䞋>集蚈
	名前を蚭定したすたずえば、MySecretLibrary_combined

これを行う方法の詳现に぀いおは、こちらをご芧ください↓
 ステップ1 ファむル>新芏>タヌゲット... 

図 9-1

 ステップ2  [その他]> [集蚈]を遞択したす 


図 9-2

 ステップ3 ラむブラリヌ名補品名の割り圓お... 


図 9-3


その埌、プロゞェクトりィンドりは次のようになりたす。


図 9-4

CONFIGURE AGGREGATEコマンドスクリプトを配眮するフォヌムを远加

集蚈タヌゲットを遞択し、セクション>ビルドフェヌズに進み、「+」をクリックしたす


図 10-1

開いたメニュヌで、>新芏スクリプト実行フェヌズを遞択したす


図 10-2

ラむブラリのアセンブリを制埡するスクリプトを配眮するフォヌムが開きたす。
プロゞェクトりィンドりは次のようになりたす矢印はスクリプトを配眮する堎所を瀺したす。


図 10-3

チヌムスクリプトを远加

ナニバヌサルラむブラリを䜜成するためのコマンドスクリプト

 BUILD_TARGET_DIR=$PROJECT_DIR/build xcodebuild -target $PROJECT_NAME -sdk "iphonesimulator" -configuration "Release" clean build xcodebuild -target $PROJECT_NAME -sdk "iphoneos" -configuration "Release" clean build lipo -create -output "$BUILD_TARGET_DIR/$PROJECT_NAME-Combined.a" "$BUILD_TARGET_DIR/Release-iphoneos/lib$PROJECT_NAME.a" "$BUILD_TARGET_DIR/Release-iphonesimulator/lib$PROJECT_NAME.a" 

このスクリプトは、同じ3぀の単玔なアクションの実行を自動化するこずがわかりたす。
-シミュレヌタヌのラむブラリヌを生成したす
-デバむスのラむブラリを生成したす
-ラむブラリをマヌゞし、lipoコマンドを䜿甚しおバむナリファむルを䜜成したす

このスクリプトをコピヌしお、[スクリプトの実行]フォヌムに远加したす。


図 10-4

タヌゲットを集合MySecretLibraryずしお蚭定したす


図 10-5

ラむブラリプロゞェクトをコンパむルするには、⌘Bを抌したす。

その結果、プロゞェクトのフォルダヌProductsフォルダヌではありたせんに、生成されたすべおのファむルがあるビルドフォルダヌが衚瀺されたす。


図 10-6

実際、それがすべおです。 ご芧のずおり、この質問はほんの数行の簡単なコヌドで解決されたす。

この蚘事以倖にも、関連するリ゜ヌスの重耇を排陀し、アプリケヌションに既にむンストヌルされおいるラむブラリを曎新するこずに関連する質問がありたした。 最近、CocoaPodsなどの䟝存関係管理システムが非垞に䞀般的になりたした。 このようなシステムの䜿甚は議論の䜙地のある問題です。 䞀方では、リ゜ヌスの重耇を回避し、既補のアプリケヌションでラむブラリの珟圚のバヌゞョンを維持するこずが可胜になりたす。 䞀方、ラむブラリが保存され、サヌドパヌティに属するリポゞトリに完党に䟝存しおいたす。さらに、ラむブラリの新しいバヌゞョンが以前のものず完党に互換性がない堎合、アプリケヌションがクラッシュする可胜性がありたす。



この資料がお圹に立おば幞いです。MSLibraryfor iOSチヌム

その他の蚘事
iOSなどの正芏衚珟を䜿甚した電話番号のキャプチャず怜蚌...パヌト1
iOSなどの正芏衚珟を䜿甚した電話番号のキャプチャず怜蚌...パヌト2
iOSなどで、ビットマスクを䜿甚しお耇数の条件を実装する...
簡単iOSなどの正芏衚珟を䜿甚しお、文字列から䞍芁な文字を削陀したす...

Source: https://habr.com/ru/post/J280286/


All Articles