りェブ䞊でiOSアプリを曞く簡単な方法

みなさんこんにちは。 少し前たで、ガブリ゚ルはゲヌム2048をくれたした。 これは、ゲヌムのクロヌンが元のクロヌンよりも人気が出る最も驚くべきケヌスです。 Gabrielの成功の倧郚分は、オヌプン゜ヌスであり、出来ればMITラむセンスです。 2䞇ポむント以䞊を獲埗したため、結果を友達ず共有したかったのですが、スクリヌンショットを取埗できたせんでした。 アプリストアは、ゲヌムセンタヌたたはそのような䜕かを持぀クロヌンの存圚を調べたした-空です。 そしお、なぜだず思いたしたか

今埌、アプリケヌションずすべおの「nishtyak」を䜜成するのに4日かかりたした。 出力は、時々Web䞊で機胜するナニバヌサルコヌドであり、ios / androidに簡単に移怍できたす。 ただし、順番に芋おみたしょう。







既に理解しおいるように、私たちはWebテクノロゞヌでのネむティブアプリケヌションの開発に焊点を圓おたす。 戊車にいる人にずっおは、すべおが非垞に簡単に機胜したす。 プロゞェクトは、ネむティブSDKを䜿甚しお䜜成されたす。その目的は、WebViewを画面党䜓に配眮しお、特定のhtmlを開くこずです。 ぀たり アプリケヌション党䜓が有線のアドレスバヌを備えたブラりザになっおいるこずがわかりたす。 これが良いか悪いかは、長い間議論できたす。 ネット䞊ではこれに぀いお倚くのホリバヌがあり、䞀郚はhtml5を奜み、䞀郚はネむティブコヌドです。 私はこのように曞いおいたすが、ここでは2048の゜ヌスをWebに持っおいるので、すべおをネむティブobjcに曞き換えるのは愚かなこずです。 そしお、フロント゚ンド+サヌバヌでの䜜業が䞻なタスクである小さなアプリケヌションに぀いお話しおいる堎合、再びhtml5を実行できる堎合、objcにずっおは銬鹿げおいたす。

wunderlistがWebテクノロゞヌでうたく機胜しおいるずしたしょう。 公匏のGmailクラむアントのように。



メむン職堎の私たちのチヌムは、b2bプロゞェクトを行っおいたす。 これらは、最小限の出垭で良い黒檀が行われるプロゞェクトです。 だから、私たちず䞀緒に、1日あたりのナニキの最小倀。 したがっお、テクノロゞヌで「遊ぶ」こずができたす。 IE8の䞋で䞀郚のタむプセットをしおいる間、私たちは顧客にfirefoxたたはchromeのみであり、埓業員のためにこれらのブラりザを無条件にむンストヌルしたこずを䌝えたした。 したがっお、私たちは長い間あらゆる皮類のhtml5ピヌスを䜿甚しおおり、満足しおいたす。 しかし、そのようなプロゞェクトを䜜成するずいうアむデアが思い浮かんだずき、私は䞀般的に以䞋に説明するほずんどすべおの技術を知っおいお郚分的に適甚したずいう事実にもかかわらず、それがどれほど面癜くお新しいかを想像するこずさえしたせんでした。

環境から始めお、テクノロゞヌを調べお゚ラヌに぀いお議論し、結論を導きたしょう。



画像



1.環境。

WebView for mobileの父は間違いなくphoneGapです。 それは䞍十分に文曞化されおいたせん文曞化するものは䜕ですかそしお非垞に簡単です。 圌は䜕をしおいたすか Webテクノロゞヌに基づいおネむティブアプリケヌションを䜜成できる他のフレヌムワヌクず同様に、phonegapはネむティブ機胜をJSコヌドにプッシュし、その逆も同様です。 ぀たり 前に曞いたように曞き、モバむルデバむスにデザむンを適合させ、カメラ、通知、連絡先、SMSなどを操䜜できるJSコヌルを甚意したす。 機胜ずプラットフォヌムのリストは、 特別ペヌゞにありたす 。 Cordovaに基づいお構築されおいたす。

たた、 Senchaに目を向けるこずをお勧めしたす。圌らはもう少し進んで、JS経由で携垯電話/タブレットのネむティブチップにアクセスするだけでなく、ネむティブUIも提䟛する機䌚を䞎えたす。 ぀たり 1぀のアプリケヌションを䜜成するず、AndroidずiOSの䞡方でネむティブのようになりたす。 ただし、senchaはextjsです。 コリアンダヌず同じように、それに倢䞭になっおいる人ず、それに耐えられない人がいたすしかし、䞀般的な理解のために、それを芋るこずをお勧めしたす。

たた、 コルドバに぀いお詳しく説明したいず思いたす。 Fongap、これは環境です。 有料サポヌト、アプリケヌションを生成するためのクラりドサヌビスなどがありたす。 Cordovaはプラットフォヌムです。 盎接ネむティブモゞュヌルずJSバむンディング。



この堎合、䞊蚘のいずれも䜿甚したせん。 たず、すべおをれロからやり盎したいず思いたした。 私にずっおは、柔軟性ず速床の理想的な比率であるCordovaのみをさらに適甚するこずにしたした。 第二に、fongapたたはcordovaの環境をすばやく把握するこずができたせんでした。 煎茶は蚀うたでもありたせん。 それらのすべおは、埋め蟌たれたhtmlでアプリケヌションを䜜成するこずを提案したした。次に、コヌドが倖郚サヌバヌ䞊にあるずきの状況を怜蚎したす。

なぜ倖郚サヌバヌなのか アプリストアでモデレヌトされたずき通垞は1週間かかりたすではなく、バグが芋぀かったずきに曎新できるアプリケヌションを䜜成したかったのです。 順番に行きたしょう。



1.1 TopCoat
ネットワヌクには、ネむティブUIを含むモバむルUIを䜜成するための倚くのフレヌムワヌクがありたす。 Senchaに぀いおはすでに説明したしたが 、 PhoneJS 、 JQ Mobile 、 Intel AFなどにも泚目する䟡倀がありたす。 Googleが教えおくれたす

この堎合、私はトップコヌトを遞びたした。 私はすでに別のプロゞェクトで圌に䌚っおいお、圌が本圓に奜きでした。 たず、これらはAndroidずiOSの䞡方で芋栄えの良いカスタムUIではありたせん。 第二に、トップコヌトは非垞にシンプルであるため、柔軟性がありたす。 Bootstrapの埌、グリッドの欠劂などを考慮するず、これは少し珍しいこずでした。 しかし、あなたはすぐにそれに慣れたす

トップコヌトには、アむコンのアむコンを持぀ブランチがありたすが、お勧めしたせん。 Font Awesomeが最高です。



1.2 iScroll
UPDナヌザヌradist2s は 、ネむティブに近いスクロヌルを実装する必芁がある堎合、iScroll党䜓は䞍芁であるず提案したした。 ちょうどzayuzatであるこずがわかりたす

-webkit-overflow-scrolling: touch;
      
      



確かに、スワむプずスクロヌルはモバむル゜リュヌションの特城です。 iScrollは、ネむティブスクロヌルに非垞に近いものを提䟛したす。 IScroll4は、最新のiScroll5ほどネットワヌク䞊で䞀般的ではありたせん。 したがっお、新しいより高床で䞍泚意。 オフサむトには倚くの䟋があり、䞀般に、すべおが明確です。



1.3 Zepto
jQueryの眮き換え、より高速なセレクタヌ、モバむルアプリケヌション向けです。 倧芏暡なプロゞェクトでは、膚倧な数のプラグむンのためjQueryを䜿甚したすが、すぐに必芁なのはセレクタヌだけです



1.4 ロダッシュ
JS䞊の単なるヘルパヌアドオン。 私たちはしばしばプロゞェクトでbackbonejsを䜿甚したすが、lodashは事実䞊必須です。 たあ、実際には、それはネむティブコヌドより遅くありたせん。 時々速くなりたす。



1.5 モヌメント
JSで日付/時刻を操䜜したす。 コメントがなければ、この頭痛のラむブラリがなければ、䜕倍にもなりたす。



プロゞェクトではBackboneを䜿甚したせんでしたが、ここでは非垞に芁求されおいたす。 繰り返したすが、マッチを保存したす。 Backboneは、倚かれ少なかれ耇雑なアプリケヌションで䟿利で䞍可欠ですが、ここでは圹に立ちたせん。 少なくずもそう思った

rad-jsに泚意するしかありたせん。これらは、モバむルアプリケヌションの開発のために匷化されたカスタムバックボヌンオブゞェクトです。 良いこずですが、非垞に掗緎されおいたす。 たた、RADが倚くの叀いコヌドを䜿甚しおいるこずも残念です。 たずえば、lodashではなく、叀いiScrollずアンダヌコアにしがみ぀いおいたす。 繰り返したすが、このプロゞェクトでは、その䜿甚は䞍芁であるように思われたした。

環境を敎理したした。 MVCたたは同様のフレヌムワヌクはありたせん。アプリケヌションのすべおの機胜は単玔なjsオブゞェクトに配眮されたす。 既補のcssフレヌムワヌクず、迅速な開発に必芁なJSラむブラリのセットがありたす。



画像



2.テクノロゞヌ

過去2幎間でテクノロゞヌずブラりザヌがどのように成長したかは驚くべきこずです。 2幎前、私はりェブ技術ずネむティブコヌドのどちらかを遞びたした。 倧芏暡なプロゞェクトでは、ネむティブコヌドを遞択したした。 そしおその瞬間、それは正しい決断でした。 さお、りェブ䞊のすべおを曞き盎しお、りェブをさらに発展させたしょう。 しかし、それはすでに残念です。数千行のネむティブobj-cは倧䞈倫ではありたせん。 私は珟実に぀いお沈黙しおいたす。



2.1 LocalStorage
たあ、すべおがクリア、ストレヌゞです。 特にテキスト/ jsオブゞェクトに必芁なので、5メヌトル以䞊。 ミヌム/倧根で少なくずも䞀床働いたこずのある人は幞せになりたす。 5メヌトルでは䞍十分な堎合、たずえば、ネむティブUserDataを介しおストラップを䜜成できたす。 オンラむンで倚くの゜リュヌションがありたす。 誰かがキャッシュをファむルにフォヌルドするこずを提案し、誰かがUserDataを介しお、誰かがWebSQLをお勧めしたす。 LocalStorageで十分です。



2.2 AppCache
おそらく、倖郚コヌドを䜿甚しおアプリケヌションを䜜成しおいるのは、このテクノロゞヌのおかげだけです。 繰り返したすが、アプリケヌションはロヌカルのhtmlファむルではなく、リモヌトサヌバヌでホストされたす。 珟時点で携垯電話にむンタヌネットがない堎合、倖郚サむトは開かないのは論理的です。 ここがappCacheが私たちを救う堎所です。 この技術に出䌚わなかったアプリケヌションキャッシュに぀いおの蚘事はたくさんありたす。ぜひ読んでください。 意味は非垞に簡単です。 特別なマニフェストファむルを䜿甚しお、キャッシュに配眮する必芁があるすべおのファむルをブラりザヌに通知したす。 矎しさは、デバむスにむンタヌネットがなくおも、キャッシュにあるファむルが機胜するこずです。 アプリケヌション内のアプリケヌションのロゞックは単玔です。

クラむアントはアプリケヌションを初めお起動し、webviewのコンテンツを吞い蟌み、webviewはアプリケヌションをキャッシュしたす。 さらに、アプリケヌションが起動されるたびに、マニフェストファむルの倉曎がチェックされたす。 倉曎されおいる堎合、キャッシュは完党に䞊曞きされたす。 倉曎がなかった堎合、䜜業は続行されたす。 したがっお、ナヌザヌがむンタヌネットを持っおいない堎合、キャッシュは曎新せずに固執したす。

したがっお、Webテクノロゞヌに基づいたネむティブアプリケヌションだけでなく、サヌバヌにコヌドを盎接配眮するこずもできたす。 必芁なものに぀いおは、䞊に曞いた-即座のバグ修正ず新しいチップの迅速な公開。



2.3 CSS3
そしお、もちろん、りェブキットのすべおの機胜を無芖するのは愚かなこずです。 䞀般に、りェブ䞊でモバむルアプリケヌションを䜜成する堎合、超近代的でしばしば新しいテクノロゞヌをサポヌトする1​​぀たたは2぀のブラりザヌ甚に䜜成するこずを忘れないでください。 ぀たり flexboxを䜿甚し、アニメヌションを自由に䜿甚し、pngfixを忘れるこずをお勧めしたす

このアプリケヌションでは、ほずんどすべおのアニメヌションはcss3に基づいおいたす。 たず、数キロメヌトルのJSコヌドを曞くよりも簡単で高速です。 第二に、アニメヌション甚のWebkitに含めるこずができるハヌドりェアアクセラレヌションのおかげで、非垞に高速に動䜜したす。



おそらくこれで十分です次に、Xcodeでプロゞェクトを準備する必芁がありたす。

すでに述べたように、すべおが非垞にシンプルで、UIWebViewのフルスクリヌンだけが必芁で、それ以䞊は必芁ありたせん。 JSONKitをプロゞェクトに接続したした、なぜなら ゜ヌシャルネットワヌクずの統合のためのネむティブパヌサヌ+ VK-SDK、Facebook-SDKよりも高速です。 もちろん、りェブ䞊で統合を行うこずは可胜でしたが、魅力のためにvk + facebookのネむティブサポヌトを䜜成したかったのです。 iOS SDKの機胜を忘れないでください。 ぀たり Webテクノロゞヌはクヌルで匷力ですが、ネむティブに実装するのが最適なタスクがありたす。 ゜ヌシャルネットワヌクずの統合は、そのようなタスクの1぀です。

残っおいるのは、htmlコヌドずアプリケヌションずの接続を確立するこずだけです。 ここでも、すべおが非垞に簡単です。 投皿したWebViewは、コントロヌラヌに委任する必芁がありたす。

アプリケヌションからWebぞのメッセヌゞは非垞に単玔で、どこからでも取埗できたす。

 [webView stringByEvaluatingJavaScriptFromString:@"alert(123);"]
      
      





Webからアプリケヌションぞのメッセヌゞは次のように機胜したす。 適切に蚭蚈されたWebViewはすべおの遷移を探知し、必芁なリンクを䜜成し、shouldStartLoadWithRequestメ゜ッドでそれらをむンタヌセプトできたす。

 <button ontouchend="window.location='vk:auth';"></button>
      
      





 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSMutableURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSString *requestString = [[request URL] absoluteString]; if ([requestString isEqualToString:@"vk:auth"]) { [VKSdk authorize:@[VK_PER_FRIENDS, VK_PER_WALL] revokeAccess:YES forceOAuth:YES inApp:YES display:VK_DISPLAY_IOS]; return NO; } }
      
      





したがっお、必芁なアドレスを傍受した堎合は、NOを返すこずを忘れないでください。そうしないず、Webバヌゞョンはただアドレスvkauthにアクセスしようずしたす。

それがすべおであり、ハヌドキャッシュしおオフラむンで䜜業し、ネむティブアプリケヌションず通信できるWebフェむスがありたす。 幞せには他に䜕が必芁ですか 



将来の゚ラヌず泚意事項



次の蚘事では、倖郚コヌドでCordovaを䜿甚する方法に぀いお説明したす。 間違いなく、間違い1はシェルをXcodeで䜜成する決定でした。 しかし、繰り返しになりたすが、タスクは、プロセスの詳现を理解するためにプロセスを研究するこずでした。 したがっお、これはたったく間違いではありたせん。 参照を陀き、シェルの䜿甚はお勧めしたせん。 他のプロゞェクトでは、コルドバほど優れたものはありたせん。 そしお、圌女がプラグむンの圢でどのように実装できるかを圌女が知らないこずすべお。

たた、バックボヌンを無芖するのは間違いでした。 アプリケヌションはすでに成長し始めおいたす。バックボヌンのようなmvcフレヌムワヌクをすぐに䜿甚すれば、さらなる開発ははるかに簡単で理解しやすくなりたす。

特に、私はNSURLRequestのセットアップに苊劎したした。 これは、実際に必芁なURLを開くWebViewの芁求オブゞェクトです。 cachePolicyのパラメヌタヌの1぀は、キャッシュポリシヌを枡す堎所です。 暙準のポリシヌブラりザヌのポリシヌずほが同等を䜿甚できるずしたしょう。たずえば、ヘッダヌに関係なく、キャッシュからのみ取埗しお、芁求をたったくキャッシュしないように指瀺するこずもできたす。 NSURLRequestReloadIgnoringLocalAndRemoteCacheDataフラグに぀いお読んだ埌、䜿甚するこずにしたした。 アプリケヌションは明らかに動䜜したので、そのたたにしたした。 そしお、このフラグはios sdkでは実装されおいなかったこずが刀明したした



ゲヌム自䜓に぀いおは、モデレヌトのためにバむナリを送信した時点で、アプリストアには2048のゲヌムはありたせんでしたが、公開時には60を超えるゲヌムがありたした。最初はHTMLコヌドにモバむルアドセンスを組み蟌みたした。 ただし、出版物自䜓の前に、私はそれを削陀し、アプリケヌションに支払いをしたした。 これらの60以䞊のゲヌムはすべお無料で、内郚に広告がありたした。 倉数を眮き換えるカスタムの方法のようなもののようです。 私はこのゲヌムでお金を皌ぐ仕事をしおいたせんが、無料でサポヌトする意味もありたせん。 競合他瀟ずの䞻な違いは、GameCenterずの統合ではなく、゜ヌシャルネットワヌクずの統合です。 個人的には、空癜のGameCenterプロフィヌルよりもVKontakteで友達の䞭で誰を远い越したかを芋るのがおもしろいです。 さお、「ハッカヌ」をフォロヌする方が簡単です。なぜなら、 サヌバヌをベヌスにしたす。 ナヌザヌのグルヌプにずっおこのようなこずがより面癜く、ナヌザヌがゲヌムあたり33ルヌブルを䜿うこずを気にしない堎合は、さらに発展させるこずができたす。 グロヌバルレヌティングを構築するためのアむデアがありたした。 たずえば、男性たたは女性、成人たたは青幎。 モスクワ州立倧孊たたはMGIMOなど このデヌタはすべお゜ヌシャルネットワヌクから収集されたす。



いずれにせよ、これは単なる「ペンのテスト」です。 さたざたなサむズのアむコンを描画するこずで獲埗したrrのほずんど。 異なるサむズの合蚈18のアむコン+ 13の開始画面。



UPD AppStoreでのそのようなアプリケヌションの合法性に関しお、@ mifkiのコメントを読むこずをお勧めしたす。すべおが圌の蚀うずおりであれば、アプリケヌションはレビュヌを行うだけでよく、サむドのコヌドを䜿甚するために削陀されたせん。 しかし、 アラマントラ は 、倖郚のルアのために圌のアプリケヌションが削陀されたず䞻匵しおいたす。

たた、以前はアプリケヌションが倖郚スクリプトに察しお蚱可されおいなかったこずがStackOverlowで確認されたしたが、セキュリティポリシヌが倉曎され、すべおが正垞になりたした。



All Articles