iOS開発者の目から見たセイルフィッシュOS開発

こんにちは、Habr!



先日、色#F9403Eの魅力的なスマートフォンがe-Legionオフィスに入りました。 マークを識別することにより、彼のモデル-Jolla CおよびOSes-Sailfish OSを確立することができました。 メーカーのウェブサイトは、デバイスの特性に関するデータを提供し、開発を開始する場所に関する情報を提供しました。











カットの下で、Sailfish OS用のモバイルアプリケーションの作成、デバッグ、インストールのプロセスがどのように行われたかを学びます。



スマートフォン2016の仕様は目立ちませんが、ハードウェアだけでなく、ソフトウェアの実装方法も重要です。











OSでAndroidアプリケーションのサポートが発表されましたが、ネイティブ開発ツールを使用して「傑作」を作成できるのであれば、なぜ移植するのでしょうか。



スピンオフ:誰がそれを必要とし、なぜ



インドと中国では、大企業がSailfish OSの開発者であるJollaと協力して、Androidのセキュリティとライセンスの問題を回避する代替OSを作成しています。 また、他のプラットフォームを使用する顧客を引き付ける機会として、新しいUX / UIに注目しています。 ロシアでは、彼らは公的部門と政府のニーズに重点を置いてセイルフィッシュの下で開発を始めることを決めました。 この情報は、 HabréJolla Webサイト、またはWMD Webサイトの他の記事で詳しく知ることができます。



開発環境



iOSの開発を始めたとき、いくつかの困難に直面しなければなりませんでした。 Mac OS Xデバイスは、Xcodeの前提条件です。 ありませんでした 2つのオプションがありました:hackintoshまたは仮想マシン。

現在、macOSがメインのオペレーティングシステムであるため、Mac OS XでテストされたJolla SDKが存在することに驚きました。 また、Windowsインストーラーを搭載したフラッシュドライブは、テーブルの上に埃が残りました。



他のプラットフォームのサポートも宣言されています:





そして再び公式ウェブサイトへリンク:

  1. VirtualBoxのインストール(エミュレーターを実行するために必要)
  2. Sailfish SDKディストリビューションをダウンロードする
  3. インストールするコンポーネントの選択
  4. ライセンス契約に同意します
  5. ...
  6. 利益!!!




プロセスは非常に簡単で、「タンバリンと踊る」必要はありませんでした。 インストーラーは、仮想マシンとの接続を個別に構成し、アプリケーションのデバッグに必要なコンポーネントをアクティブ化します。



開発環境として、Qt Creatorが使用されます。











IDEはそのままではXcodeほど機能しませんが、クラッシュは少なく、構文の強調表示は落ちません:)











コードと言語



UIを開発するために、QMLが使用されます-Qtメタ言語。 これらの言語の使用経験が豊富な場合は、C ++またはPythonを使用してロジックを作成できます。

QMLを選択したのは、その機能が単純なアプリケーションを実装するのに十分であるためです。 QMLは、視覚要素とその相互作用を記述する宣言型プログラミング言語です。 構文はJSONに似ており、コードは読みやすく、理解しやすいです。



基本的なタイプと要素を実装するには、Qt Quickを使用します。 あなたが得る:



iOSやAndroidとの類推により、この情報を製造元のWebサイトで検索しました。 結局のところ、Qtサイトはこれらの目的により適しています。 doc.qt.ioより多くのドキュメントとより興味深いコード例が含まれています。

Jollaは、開発者が独自のQMLモジュール「Sailfish Silica」を使用するよう招待しています。 このモジュールは、Sailfishのスタイルで要素を作成するように設計されています。 これらのコンポーネントの実装は、プリインストールされたコンポーネントアプリケーションにあり、ドキュメントはSDKの一部またはJolla Webサイトで配布されています。











また、スマートフォン用に選択されたメインテーマに対応する色でアプリケーションを設計するのにも役立ちます。



Label { text: "Hello habrahabr!" color: Theme.highlightColor x: Theme.horizontalPageMargin width: parent.width - x*2 font.pixelSize: Theme.fontSizeSmall wrapMode: Text.Wrap }
      
      







この概念は、iOSのUIAppearanceの使用をやや連想させるもので、設定はアプリケーションによって制限されません。



標準要素からインターフェイスを作成することは、iOSよりもさらに簡単です。 ボタンを作成し、他の要素に対する位置とオフセットを指定します。 できた おそらく同じレイアウトでNSLayoutAnchorクラスが追加されたiOS 9からのみインターフェイスを操作できました。



残念ながら、カスタマイズですべてがうまくいくとは限りません。場合によっては、自分で要素を作成する必要があります。 また、アプリケーションで決して使用することができなかったSilicaWebViewの実装が苦情を引き起こし、情報を表示しようとするとコンポーネントが絶えずクラッシュしました。 代わりに、 QtWebKitに含まれている標準のWebViewを使用しました。











Webで作業するとき、他の問題がありました。 開発を開始した翌日にアプリケーションを開始しましたが、ニュースのリストの代わりに空白の画面が表示されました。 問題の解決策を見つけるのに数時間かかりました。 結局のところ、OSに組み込まれたアプリケーションとブラウザーは、HTTPSを介したデータのロードを停止しました。 数分、良心に悩まされ、その後HTTPSがHTTPに変わりました。



 function requestUrl(source) { var url = "http://newsapi.org/v1/articles?" url += "source=" + source url += "&apiKey=" + apiKey return url } if (status === XMLHttpRequest.DONE) { var objectArray = JSON.parse(req.responseText); if (objectArray.errors !== undefined) { console.log("Error fetching tweets: " + objectArray.errors[0].message) } else { for (var key in objectArray.statuses) { var jsonObject = objectArray.statuses[key]; news.append(jsonObject); } } if (wasLoading == true) { newsObject.isLoaded() } }
      
      







残りのアプリケーションモジュールに関しては、それらの実装は特に問題を引き起こしませんでした。 実績のあるMVCパターンを採用し、少しバンディングを追加し、ひとつまみの委任を加えて、たくさんのアニメーションを振りかけ、ミックスします。新しいプラットフォームの開発を試みるために、数晩にわたって書かれたニュースアプリケーションを取得します。



エミュレーターと実際のスマートフォン



前に書いたように、アプリケーションを起動するプロセスは実際には問題を引き起こしませんでした。 SDKをインストールする前に、サポートされているバージョンのVirtualBoxをコンピューターに配置し、残りはインストーラーが処理します。

次に、実行するプラットフォームを選択し、[スタート]ボタンをクリックしてアプリケーションを起動します。











エミュレータは苦情なしで動作します。すべてが安定して迅速に行われます。 かつて、私はAndroidエミュレーターの最初のバージョンの1つを使用する機会がありましたが、その5分間の起動により痛みとパニック発作が発生しました。 はい、今彼はずっと良くなっていますが、堆積物は残っています。

ただし、アプリケーションを複数回起動すると小さな問題が発生しました。 アプリケーションの古いインスタンスは終了せず、その結果、プログラムのインスタンスを5〜9同時に実行します。 特定の最大数に達した後、新しいバージョンは開始されず、古いインスタンスを手動で完了する必要があります。











デバイスでデバッグを実行するのに少し時間がかかりました。 ドキュメントを勉強しなくてもプロセスは直感的でした。 設定をさまようとすべての適切なボタンを押した後、指定したIPアドレスでデバイス上でアプリケーションを起動する機能を見つけました。 電話をWiFiネットワークに接続し、アドレスを入力して、もう一度[開始]をクリックしました。 2分間待ってから、私のプログラムはJolla Cで始まりました。Appleは私たちの祈りを聞いたので、Xcode 9 + High Sierra + iOS 11があれば、同じ奇跡を起こすことができます。



印象



ロシアでのこのプラットフォームの見通しについては説明しません。このテーマに関する十分な記事があり、別のホリバーを始めたくありません。



ユーザーとして、デバイスの応答性、メイン画面から直接アプリケーションとやり取りできること、メインテーマと直感的なインターフェイスを変更した後、すべてのアプリケーションのデザインを変更できることを気に入っていました。











開発者の観点からも、多くの肯定的な印象がありました。

エントリーのしきい値は非常に低く、数日でシンプルだが機能的なアプリケーションを作成することができました。 同時に、より多くのリソースを必要とする複雑なタスクにC ++を使用する可能性がありますが、製造元のWebサイトに記載されているケチな文書だけが落ち込んでいます。

インターフェースとUI要素は簡単に実装できますが、Jollaからのガイダンスとビジョンは十分ではありません。 サイトのガイドラインの代わりに、私はUXに捧げられた1ページを見つけました。その主な考えは3つの言葉で表されます: 「単に美しい、論理的で、魔法の」。 しかし、デザイナーにとってはなんという広がりでしょう! 最も大胆なアイデアを実装できます。



Sailfishの開発者とこの記事に関するフィードバックをお待ちしております。

良い一日と良いコードを!



UPD:訂正と追加を含む有益なコメントを@kirikchに感謝します。



All Articles