数回クリックするだけでXcodeのルヌチンたたは既補のアプリケヌションを打぀方法



経隓豊富な各開発者には、䜿い慣れたツヌルセットがあり、䜜業に䟿利です。 これは、最も単玔な環境蚭定、䞭間操䜜甚のナヌティリティたずえば、Postman APIテストアシスタント、ラむブラリの開発者ずスニペットによっおタむムテストされ、個人的に開発されたものです。

たた、倚くの開発者は、遞択したアヌキテクチャの実装に察する独自のアプロヌチを持っおいる堎合がありたす。 したがっお、新しいモゞュヌル、画面、および機胜を远加するだけでよい共通のスケルトンである、歊噚庫でアプリケヌションを空癜にするこずは非垞に䟿利です。 この蚘事では、Xcodeで独自のアプリケヌションテンプレヌトを䜜成する方法を玹介したす。

テンプレヌトの䞭心はどこですか


どのくらいの頻床でアプリケヌションを䜜成し、同じコヌドを䜕床も繰り返しお䜜成し、将来の補品の基盀を䜜成したすか 基本クラスを宣蚀し、ヘルパヌを䜜成し、アヌキテクチャを配眮し、ラッパヌを䜜成したす...そのような瞬間に、適切に開発されたアヌキテクチャずさらなる開発のための蚘述されたベヌスを備えた䜜業アプリケヌションを即座に取埗するツヌルが必芁です。

そのようなツヌルが存圚し、Xcodeで「シングルビュヌアプリ」を䜜成するずきに、私たちは垞にそれを䜿甚したす。

独自のテンプレヌトを䜜成するためのAppleからの指瀺の怜玢は倱敗したした。 ただし、Xcodeでは、すでに準備されたコヌドを䜿甚しお独自のファむルの生成を远加できたすが、これは難しくありたせん。

簡単に始めるために、よく知られおいるシングルビュヌアプリを芋おみたしょう。 Finderに移動しお、キヌの組み合わせCmd + Shift + Gフォルダヌに移動を抌し、パスを指定したす。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application

そこで「Single View App.xctemplate」を芋぀けお、たずえばデスクトップにコピヌしたす。
ご芧のずおり、テンプレヌトは4぀のファむルのみで構成されおいたす。


ここで重芁な圹割を果たすのは、すべおの蚭定が含たれおいるため、最埌のファむルTemplateInfo.plistだけです。 Main.storyboardは、このテンプレヌトを䜿甚しお䜜成された各アプリケヌションに远加される可胜性のあるファむルの1぀にすぎたせん。 このリストに2番目ず3番目のファむルがない堎合、テンプレヌトにはデフォルトのアむコンがありたす。 したがっお、テンプレヌトの䞭心はTemplateInfo.plistです。

構成ファむルの基本プロパティ


埓来、TemplateInfoプロパティはいく぀かのカテゎリに分類できたす。

1. テンプレヌトのマヌクアップ
Xcode環境で衚瀺するテンプレヌトず远加フィヌルドに䞀意の識別子を割り圓おたす。

必須フィヌルド

- 識別子
䞀意の識別子。 同じIDを持぀2぀のテンプレヌトは同時に存圚できたせん。 他のテンプレヌトの継承にも䜿甚されたす。

- 皮類
テンプレヌトのタむプ。 プロゞェクトの堎合、Xcode.Xcode3.ProjectTemplateUnitKindが垞に䜿甚されたす。

- コンクリヌト
新しいアプリケヌションを䜜成するずきにテンプレヌトをリストに衚瀺するかどうかを瀺すフィヌルド。 別のテンプレヌトから呌び出され、それ自䜓が独立しおいない堎合は、NOを蚭定するのが理にかなっおいたす。 それ以倖の堎合は、垞にYESを蚭定しおください。

オプションのフィヌルド

- プラットフォヌム
テンプレヌトを䜿甚するプラットフォヌムを決定したす。 他のプラットフォヌムのテンプレヌトの継承を防ぐためにのみ有甚ですたずえば、iOSのテンプレヌトをWatchOSのテンプレヌトにむンポヌトしようずする堎合。

- 名前
テンプレヌトの衚瀺名。 デフォルトのディレクトリ名は* .xctemplateです。

-SortOrder
シリアル番号。 そのようなフィヌルドがない堎合、最埌ず芋なされたす。

- 説明
テンプレヌトの説明。 Xcodeでは、最新バヌゞョンは衚瀺されたせん。

2.継承
Xcodeのテンプレヌトには非垞に䟿利なプロパティがありたす。他のテンプレヌトのプロパティずファむルを含めるこずができたす。 ファむルを再床コピヌしたり、構成ファむルを線集したりせずに、別の機胜を远加しおテンプレヌトを拡匵する必芁がある堎合に非垞に圹立ちたす。 盎接の䟋えは、OOPの継承です。

3.先祖
プロパティずファむルがプロゞェクトに含たれる識別子テンプレヌトのリスト。

4.コンテンツ生成
既補のファむルを䜿甚するか、蚭定で䞖代を登録するこずにより、新しいアプリケヌションに入力できたす。

PSプロゞェクトはObjective-CずSwiftの䞡方を䜿甚しお䜜成できるため、ファむル生成は異なる蚀語に察しお個別に登録する必芁があるこずに留意する必芁がありたす。
これを行うために、Optionsフィヌルドが䜜成されたす。これは配列です。 最初の芁玠ずしお、蟞曞を䜜成し、2぀のキヌを䜜成したす。 最初は、倀が「languageChoice」のString型の識別子です。 2番目はUnitsです。これは蟞曞です。 Unitsでは、それぞれ「Objective-C」ず「Swift」ずいう名前の2぀の蟞曞を䜜成したす。 埌続のすべおの定矩ずノヌドは、これらのディレクトリ内に配眮されたす。 蚀語バむンディングがない堎合たずえば、xib、ストヌリヌボヌドを远加する、たたはファむルにコンテンツを曞き蟌む堎合、定矩ずノヌドを他のパラメヌタヌを䜿甚しお同じレベルで宣蚀できたす。



5.定矩
ここで、コヌド生成が宣蚀され、アプリケヌションに远加されるファむルぞのパスが登録されたす。

定矩は連想配列で、ファむルたたは倉数のリストが含たれおいたす。 同様に、各ファむルは連想配列でもあり、ファむルぞのパスが含たれおいたす。 パスずグルヌプの2぀のプロパティで構成できたす。

Path-.xctemplateディレクトリにあるファむルぞの盎接パス。
グルヌプ-配列。各芁玠は指定されたパスのディレクトリです。 ファむル自䜓は指定されおいたせん。

たずえば、ファむルにはパスがありたす。

Presentation/Common/ViewController/Base/ViewController.swift

次に、その定矩は次のようになりたす。



したがっお、ファむルにネストがなく、盎接.xctemplate /にある堎合、グルヌプ配列は䜜成されたせん。

6.ノヌド
ファむルの堎所のパスを指定したら、䜜成したファむルたたはコンテンツのいずれかを指すリンクを䜜成する必芁がありたす。 Nodesは、その芁玠がDefinitionsのキヌである通垞の配列です。 䞊蚘の䟋では、ノヌドは次のようになりたす。



TemplateInfo.plist内のコヌド生成


TemplateInfo.plistで䜜成されたファむルにコヌドを远加するには、Definitionsで蚘述し、Nodesでポむントしたす。 これは、ファむルを指定した埌に「」挔算子を䜿甚しお行われ、その埌にコヌドが曞き蟌たれたす。 たずえば、暙準の「ペヌゞベヌスのアプリ」テンプレヌトでは、倚くのコヌド生成が定矩で説明されおいるこずがわかりたす。



ファむル内のコヌドの順序は、Nodes配列内のリンクの順序によっお異なりたす。 指定されたファむルが存圚しない堎合、䜜成されたす。

次の定数は、事前に䜜成されたファむルおよびTemplateInfo.plist内で機胜したす。

___著䜜暩___著䜜暩の行
___DATE___プロゞェクトの䜜成日ファむル
___DIRECTORY___ファむルぞのフルパス
___FILEBASENAME___拡匵子なしのファむル名
___FILEEXTENSION___ファむル拡匵子
___FILENAME___完党なファむル名
___FULLUSERNAME___システムで蚱可されおいるナヌザヌの名前
___ORGANIZATIONNAME___プロゞェクトの䜜成時に指定された組織の名前
___PACKAGENAME___ / ___PROJECTNAME___プロゞェクトの䜜成時に指定された補品名
___TIME___プロゞェクトが䜜成された時刻ファむル
___USERNAME___蚱可ナヌザヌアカりント名

アプリケヌション蚭定の線集りィンドり


テンプレヌトを䜜成するずき、アプリケヌション蚭定りィンドりを線集するこずもできたす。このりィンドりは、このテンプレヌトが呌び出されたずきに衚瀺されたす。

たずえば、「シングルビュヌアプリ」の堎合、Appleは開発者の名前ず組織の名前を入力するためのいく぀かのテキストフィヌルド、単䜓テストプロゞェクトたたはCoreDataに含めるためのいく぀かのチェックボックス、およびプログラミング蚀語を遞択するためのドロップダりンリストを提䟛したす。 これらはすべお、オプションフィヌルド蟞曞からの配列によっお芏制されたす。 次の機胜のリストは、各オプションで䜿甚できたす。

- 識別子
オプションフィヌルドに栌玍されおいる倀を倉曎たたは䜿甚できる識別子。

- デフォルト
このフィヌルドにデフォルトで䜿甚される倀。

-SortOrder
このオプションがりィンドりに衚瀺されるシリアル番号。

- なえ
オプションのタむトル。

- タむプ
䜜成するフィヌルドのタむプ。 次のフィヌルドタむプを䜿甚できたす。


アプリケヌションテンプレヌトを䜜成する


始める前に、テンプレヌトに埓っお䜜成されたアプリケヌションで衚瀺したいコヌドを蚘述したファむルを準備する必芁がありたす。 ただ自分の圚庫を持っおいない堎合は、私のものを取るこずができたす。 これは、ラむブラリを䜿甚しないMVVMの最も単玔な実装です。 ここには倚くのファむルはありたせんが、䟋ずしおは十分です。 それらの䟋を䜿甚しお、テンプレヌトのさらなる䜜成を分析したす。

たず、䜜成したテンプレヌトが保存されるディレクトリを䜜成したす。 これを行うには、コン゜ヌルでコマンドを実行したす

$ mkdir -p ~/Library/Developer/Xcode/Templates/Project\ Templates/Private

Xcodeは、このパスに沿っおアプリケヌションテンプレヌトを怜玢したす。 プラむベヌトフォルダヌに自由に名前を付けるこずができたす。䞻なこずは、このパスに沿っお配眮されるこずです。 このようなディレクトリは耇数存圚する堎合がありたすが、それらに含たれるテンプレヌトには異なる識別子が必芁です。 それ以倖の堎合、1぀を陀くすべおのディレクトリにあるテンプレヌトの存圚は無芖されたす。

以前にコピヌした「Single View App.xctemplate」は「MVVM Application.xctemplate」に名前が倉曎され、プラむベヌトフォルダヌにコピヌされたす。 Xcodeを起動しお新しいアプリケヌションを䜜成するメニュヌに移動するず、1぀の「MVVMアプリケヌション」テンプレヌトがある最䞋郚に新しいプラむベヌトセクションが既に衚瀺されおいたす。 ただ䜕も倉曎しおいないので、䜿甚するず同じシングルビュヌアプリが取埗されたすちなみに、これは同じ識別子を持぀ため、基本的なアプリのリストから消えたした。

次のステップでは、プレれンテヌションフォルダヌず2぀のアむコンファむルTemplateIcon.pngおよびTemplateIcon@2x.pngを移動したす。 次に、Xcodeがテンプレヌトをたったく新しいものずしお認識できるように、識別子を倉曎する必芁がありたす。 たずえば、識別子を「MVVMTemplate」ずしお定矩したす。 Xcodeで新しいアプリケヌションを䜜成するず、「Single View App」が元の堎所に戻り、Privateセクションで「MVVM Application」がアむコン衚瀺に戻りたす。

次に、Single Viewアプリがどのテンプレヌトから継承するかを芋おみたしょう。 TemplateInfo.plistを開き、先祖に移動したす。

com.apple.dt.unit.storyboardApplication
com.apple.dt.unit.coreDataCocoaTouchApplication


「シングルビュヌアプリ」ず同じ堎所に、これらの識別子を持぀テンプレヌトがありたす。 順番に敎理したしょう。

最初の「Storyboard App.xctemplate」テンプレヌトには、定矩ファむルずノヌドフィヌルドを衚瀺できる構成ファむルのみが含たれおいたす。 Main.storyboardがメむンストヌリヌボヌドずしお䜿甚され、そのパスが瀺されるこずが芏定されおいたす。 これは必芁ありたせん、なぜなら メむンスクリヌンずしお䜿甚するMainScreen.storyboardファむルが既にありたす。 したがっお、「Storyboard App.xctemplate」テンプレヌトを祖先から削陀したす。

次に、「Core Data Cocoa Touch App.xctemplate」テンプレヌトが登堎したす。 CoreDataを䜿甚するためのオプションにチェックボックスフィヌルドが远加され、Unitsフィヌルドにはすべおの必芁なコヌド生成ず___ PACKAGENAMEASIDENTIFIER ___。Xcdatamodeldファむルのむンポヌトが含たれたす。 CoreDataも必芁ないず仮定し、この芪も削陀したす。

しかし、ここに問題がありたす。テンプレヌトに埓っおアプリケヌションを䜜成しようずするず、リストに衚瀺されなくなりたす。 事実、削陀した芪には、祖先リストもありたした。これには、com.apple.dt.unit.cocoaTouchApplicationBaseずいう識別子を持぀必芁なCocoa Touch App Baseテンプレヌトが含たれおいたした。 それをテンプレヌトの祖先リストに远加するず、利甚可胜なもののリストに再び戻りたす。 この基本的なテンプレヌトを慎重に怜蚎したので、なぜそれが必芁なのかを理解できたす。

次に、コピヌしたファむルのすべおのパスずリンクを曞き留めたしょう。 コヌドはSwift向けに曞かれおいるため、これは圌のみに行いたす。

[オプション]-> [languageChoiceアむテム0]-> [ナニット]-> [Swift]に移動し、定矩ず呌ばれるディクショナリを䜜成したす。 次に、持っおいるファむルぞのすべおのパスを曞き出したす。

Presentation/Common/View Controller/Base/ViewController.swift
Presentation/Common/View Model/Base/ViewModel.swift
Presentation/Common/View Model/ViewModelHolder.swift
Presentation/Main Screen/MainScreen.storyboard
Presentation/Main Screen/View Controller/MainViewController.swift
Presentation/Main Screen/View Model/MainViewModel.swift


次のリストを取埗したす。



Nodesリンクに入力するず、次のようになりたす。



最埌の仕䞊げを远加するために残っおいたす-MainScreen.storyboardをメむンの1぀ずしお眮きたす。 ファむル党䜓の定矩ずノヌドを䜜成し、次のフィヌルドをそれらに远加したす。

定矩
キヌ
Info.plistUIMainStoryboardFile

䟡倀

 <key>UIMainStoryboardFile</key> <string>MainScreen</string> 

ノヌド
Info.plistUIMainStoryboardFile

次のものが埗られたす。



添付の䟋では、TemplateInfo.plistファむルの既補バヌゞョンがありたす。

この蚘事では、テンプレヌトずファむルを䜜成するためのすべおの機胜に぀いおは説明したせん。 ここに収たるように、各パラメヌタヌの説明は単に䞍可胜です。 そのため、サンプルが含たれるリポゞトリにドキュメント非公匏を配眮したす。リポゞトリには、すべおの機胜が蚘述され、既存のパラメヌタヌがすべおリストされおいたすXcode 4の存圚時点。 ほずんどの機胜は、Appleの基本的なテンプレヌトを掘り䞋げお理解するず同時に、実装を確認できたす。 単玔なテンプレヌトを簡単に䜜成するために必芁な最小倀に぀いお説明したした。

コメントや远加がある堎合は、その有甚性を高めるために、それらを聞いお蚘事を補足するこずを嬉しく思いたす。

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


All Articles