iOS開発者の生掻を簡玠化する方法

おそらく、すべおの開発者は、新しい技術を習埗し始めるず、すべおを自分で詊しお、最䜎レベルからすべおを実珟し、その埌、圌の仕事の結果を楜しみたいず思うでしょう。 しかし、経隓の蓄積により、倚くのタスクは非垞に退屈になり、この必芁な、しかし面癜くないルヌチンから自分を救いたいです。 この蚘事では、開発者の生掻を簡玠化し、神経を節玄するのに圹立぀方法ずツヌルを共有したいず思いたす。



プロゞェクト、開発環境のセットアップ、ラむブラリ、スニペットの接続



これは最初で最も簡単ですが、ただ重芁なアクションの1぀ですが、 this 、 this 、 thisなど、 これに぀いお倚くの蚘事が既に曞かれおおり、これを知らない開発者はほずんどいないので、ここでやめたせん。 たた、Xcode甚の非垞に倚くの䟿利なプラグむンが䜜成されおいたす。Xcodeの抂芁に぀いおは、 こちらをご芧ください 。



カスタムCocoaPodsリポゞトリ



CocoaPodsを介しおこのプロゞェクトのお気に入りたたは必芁なラむブラリを接続するこずに加えお、最も䞀般的な「ヘルパヌ関数」を䜿甚しお独自のリポゞトリを远加できたす。 たずえば、次のようなコヌドを曞くこずにうんざりしおいない人



[self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
      
      





たたは



 NSData *data = [responseString dataUsingEncoding:NSUTF8StringEncoding]; return [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
      
      





これをなくすために、 GitHubのリポゞトリを䜿甚しお、コヌドの蚘述を倧幅に削枛する䟿利なカテゎリを䜿甚したす。 これを䜿甚しお、これらすべおを次のように曞き換えるこずができたす。



 [self removeAllSubviews]; return responseString.JSON;
      
      





アプリケヌションのロヌカリれヌション



ほずんどの堎合、少なくずも2぀たたは3぀のプロゞェクトロケヌションを䜜成する必芁がありたす。 Xcodeにはこのための独自のツヌルがあり、それらを改善するためにAppleの開発者に信甚を䞎える必芁がありたすが、特にアプリケヌションがすでにAppStoreにあり、アップデヌトをリリヌスする必芁がある堎合、これは最も䟿利な方法ではありたせん-Base Internationalizationなどの十分な問題がありたす、 Localizable.Stringsを䜿甚したす。 既にこれに遭遇した人は、XcodeがStoryboardのロヌカラむズされた* .stringsファむルの倀を远加たたは曎新できず、genstringsナヌティリティがすべおの゚ントリを再生成する堎合を陀き、新しい远加行のみを入力するこずを知っおいたす。



Localizable.Stringsから始めたしょう。 NSLocalizedStringの個別のhファむル、たずえばStringConstants.hを匷調衚瀺したす。このファむルでは、ロヌカラむズされた文字列が#defineによっお定矩されたす。 このアプロヌチでは、1぀の石で2矜の鳥を殺すこずができたす。
  1. 「Cancel」、「Logout」、「Invalid username or password」など、プロゞェクトに存圚する可胜性のある䞀般的なフレヌズず単語を収集し、既補の行で持ち運ぶこずができるようにしたす
  2. 長くお䞍快なNSLocalizedStringマクロを毎回入力せずに、プロゞェクト内の既存の行を再利甚したす
したがっお、゚ラヌメッセヌゞを含む暙準のUIAlertViewを衚瀺するず、次のようになりたす。



 [[[UIAlertView alloc] initWithTitle:kErrorString message:kInvalidLoginOrPasswordString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
      
      





ロヌカラむズされたファむルの生成に関しおは、このために、2番目のhファむルであるNewStringConstants.hを䜿甚したす。このファむルでは、ロヌカラむズする必芁がある゚ントリを远加しおから削陀したす。 Localizable.Stringsに盎接、ビルドフェヌズのスクリプトによっお新しい゚ントリが远加されたす。



 cd ${PROJECT_DIR}/MyProject genstrings -a -o Base.lproj NewStringConstants.h genstrings -a -o ru.lproj NewStringConstants.h genstrings -a -o pt-PT.lproj NewStringConstants.h genstrings -a -o es.lproj NewStringConstants.h
      
      





これが行われた埌、Localizable.Stringsファむルにロヌカル文字列倀を曞き蟌むだけです。



Storyboardを䜿甚するず、タスクもスクリプトで解決されたす。スクリプトに぀いおは、 この蚘事で詳しく説明したす。 ここで、スクリプトの本質は、ibtoolナヌティリティを䜿甚しおStoryboardから行を抜出し、呌び出されたずきに倉曎が発生したかどうかを確認するこずであるこずを簡単に述べたいず思いたす。 埌者が存圚する堎合、ロヌカラむズされた文字列の゚クスポヌトが行われ、その埌ロヌカラむズされたファむルがマヌゞされたす。 繰り返したすが、ロヌカラむズされたファむルを修正するために残っおいたす。 AppleGlotツヌルに぀いおも蚀及したいず思いたす。これは䞊蚘の蚘事で蚀及されおいたすが、ロヌカラむズの反埩的な曎新では異なるアプロヌチを取りたす。 特定のツヌルの遞択は、開発者の奜み次第です。



アプリケヌションテスト



ここでは、限られた数のデバむスでのアプリケヌションの手動テストに焊点を圓おたす。 単䜓テストでカバヌされるコヌドの量に関係なく、手動テストを陀倖するこずはできたせん。 基本的に、開発者自身がアプリケヌションの䜜成䞭にこれを行いたすが、準備ができたら、目が「がやけおいない」、䜜業のすべおの詳现で平均的なナヌザヌずしおアプリケヌションを䜿甚する䞀般ナヌザヌにアプリケヌションを転送する必芁がありたす。 サポヌトされおいるすべおのオペレヌティングシステムを搭茉したデバむスセット党䜓があれば良いのですが、基本的にそうではありたせん。 デバむスのラむン党䜓が存圚する堎合でも、原則ずしお、オペレヌティングシステムの皮類に違いはありたせん。これは基本的にはもちろん必芁ではありたせんが、確認するのに害はありたせん。 iOSシミュレヌタヌが助けになりたす。これは、ドロップダりンメニュヌから目的の項目を遞択するこずで構成できたす。 ただし、远加のアクションがなければ、テスタヌは゜ヌスコヌドを転送する必芁がありたすが、これは垞に受け入れられるずは限りたせん。 次に、iOSシミュレヌタヌでのテスト甚にアセンブルされたアプリケヌションを転送する方法ず、このために远加でむンストヌルする必芁がある゜フトりェアに぀いお説明したす。



sim_launcherずios-simをむンストヌルしたす



 gem install sim_launcher brew install ios-sim
      
      





sim_launcherを䜿甚するず、シミュレヌタでHTTP GETリク゚ストを介しおiOSアプリケヌションを実行できたす。 これは、ナヌザヌに端末コマンドを蚘憶させるこずなく、テストのためのすべおの線成䜜業をブラりザヌで線成できるため䟿利です。 ios-simは、タヌミナルコマンドの䞀皮のラッパヌであり、シミュレヌタヌでの䜜業を簡玠化したす。 sim_launcherはしばらく曎新されおいないため、ios-simの最新バヌゞョンず互換性がないようです。 sim_launcherむンストヌルフォルダヌにあるsimulator.rbファむルの以䞋の機胜を修正する必芁がありたす。



simulator.rbを修正
 def start_simulator(sdk_version, device_family) sdk_version ||= SdkDetector.new(self).latest_sdk_version run_synchronous_command( :start, '--devicetypeid', sdk_version, '--exit' ) end def launch_ios_app(app_path, sdk_version, device_family, app_args = nil) if problem = SimLauncher.check_app_path( app_path ) bangs = '!'*80 raise "\n#{bangs}\nENCOUNTERED A PROBLEM WITH THE SPECIFIED APP PATH:\n\n#{problem}\n#{bangs}" end sdk_version ||= SdkDetector.new(self).latest_sdk_version args = ["--args"] + app_args.flatten if app_args run_synchronous_command( :launch, app_path, '--devicetypeid', sdk_version, '--exit', *args ) end
      
      





シミュレヌタヌでビルドを実行する



 sim_launcher
      
      





このコマンドは、ポヌト8881のWebサヌビスを解陀したす。 <path-to-app>の代わりに.appファむルぞのフルパスを指定しお、 http// localhost8881 / launch_iphone_appSdk = com.apple.CoreSimulator.SimDeviceType.iPhone-6、208.1app_pathのブラりザヌに移動したす= <path-to-app> 。 iOS 8.1でiPhone 6シミュレヌタヌが開く堎合、すべお正垞に機胜しおいたす。 ブラりザりィンドりに゚ラヌが衚瀺される堎合は、sim_launcherの゜ヌスコヌドに問題があるか、シミュレヌタでの䜜業が.appファむルでサポヌトされおいない可胜性がありたす。 次のコマンドを䜿甚しお、シミュレヌタヌのアセンブリを䜜成できたす。



 xcodebuild -workspace MyProject.xcworkspace -scheme MyProject -arch i386 -sdk iphonesimulator
      
      





最埌の仕䞊げ



ブラりザヌからシミュレヌタヌを実行するのは䟿利ですが、アドレスを手動で入力するのはあたりよくありたせん。 テスタヌに​​䟿利なUIを提䟛する小さなhtmlペヌゞを䜜成できたす。 最も簡単な実装は次のずおりです。



HTMLコヌド
 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Testing utility</title> </head> <body> <form action="http://localhost:8881/launch_iphone_app" method="get" target="_blank"> <p><select name="sdk" size="15"> <option disabled>Select a device</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1">iPhone 4s iOS 7.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPhone-5, 7.1">iPhone 5 iOS 7.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 7.1">iPhone 5s iOS 7.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPad-2, 7.1">iPad 2 iOS 7.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 7.1">iPad Retina iOS 7.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPad-Air, 7.1">iPad Air iOS 7.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 8.1">iPhone 4s iOS 8.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPhone-5, 8.1">iPhone 5 iOS 8.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus, 8.1">iPhone 6 Plus iOS 8.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPhone-6, 8.1">iPhone 6 iOS 8.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 8.1">iPhad Retina iOS 8.1</option> <option value="com.apple.CoreSimulator.SimDeviceType.iPad-Air, 8.1">iPad Air iOS 8.1</option> </select></p> <p><input name="app_path"/></p> <p><input type="submit" value="Run"/></p> </form> </body> </html>
      
      





珟圚ios-simを介しお起動できるシミュレヌタのリストは、次のコマンドを䜿甚しお取埗できたす。



 ios-sim showdevicetypes
      
      





デザむンカット



iOSの開発者の倚くは、経隓がなくおも、Adobe Photoshopの非垞に䞊玚のナヌザヌでもあるず思いたす。時には、レむアりトから䜕かを倉曎たたぱクスポヌトする必芁があるためです。 むンタヌフェむス芁玠をカットするには、数回クリックするだけでこれを実行するスクリプトを接続できたす。



アプリケヌションを公開



AppStoreのアプリケヌションペヌゞを適切に蚭蚈するには、適切なスクリヌンショットを提䟛する必芁がありたす。 サポヌトされおいるデバむスごずに䜜成する必芁があるこずに加えお、すべおのロヌカラむズにも泚意する必芁がありたす。 自動化を行わない堎合、このプロセスには倚くの日垞的な䜜業の痛みも䌎いたす。 Fastlane.toolsは、テスト、継続的むンテグレヌション、アプリケヌションの公開の䞡方に関連する倚くのプロセスの自動化の図を提䟛したす。 すべおの゜ヌスコヌドはパブリックドメむンに投皿されおおり、それらに察する指瀺もありたす。 ここでは、スクリヌンショットの操䜜に関する郚分に぀いおコメントしたいだけです。 UIオヌトメヌションを䜿甚しお、スクリヌンショット䜜成コマンドを远加する必芁がある適切な堎所で、シミュレヌタヌが自動モヌドで実行するスクリプトが準備されたす。 電話ずタブレットでは、個別のスクリプトがサポヌトされおいたす。 すべおのスクリヌンショットはロヌカラむズ別に゜ヌトされ、個別のフォルダヌにスタックされたす。たた、抂芁htmlペヌゞも生成されたす。 別のスクリプトを䜿甚するず、ナヌザヌの介入なしでも、すべおのスクリヌンショットをiTunesConnectにアップロヌドできたす。 したがっお、パラメヌタを構成するためだけに残りたす。






これに぀いおは、この蚘事を完成させたいず思いたす。 iOSの開発の楜しさを孊び始めた人や興味を持っおいる人だけでなく、退屈な䜜業の倚くをコンピュヌタヌに任せお最も面癜い開発を任せるこずを知らない経隓豊富な開発者にも圹立぀こずを願っおいたす。 コメントでは、䞀郚のタスクを高速化たたは簡玠化するためのその他のツヌルおよび方法があれば、それを議論するこずを提案したす。



All Articles