2021/07/24

SailfishOS向けアプリのビルド

久しぶりに書いているけど、ネタとしては単なる備忘録。

実に3年ぶりにQayttamatonを更新した。
結構仕事が忙しかったし、あと少しこれができたらなーと思うところはあったけど最低限のところは動いてくれていたし、時間ができたらやろうやろうと思いつつ3年が経ってしまっていた・・・

きっかけは1通のメール。
なんか使ってくれてるヒトが居るらしく、要約するとこんな話。
新しい端末を買ったんだけどアーキテクチャに合ったパッケージがない。自力でビルドしようと思ったんだけど、ソースの公開先が既に息してない。どっか別にソースを公開してる?あるいは、新しいアーキテクチャ(恐らくaarch64)に対応したパッケージ出す予定ある?
おー、そうかそうかなるほど。

ってことで、@kenya888さんにお願いして日本Qtユーザ会で公開してた頃のソースを引っ張り出してもらってgitlabに公開してみた。

さて、話はここで終わらない。
実はちょっと前に気がついていたんだけど、半年以上前から「ログインできない」っていう情報がストアのコメントにあったんだよね・・・
原因はUNTAPPがCAPTCHA認証を導入したこと。

QayttamatonからUNTAPPDへのログイン(ユーザ認証)はそれ用のWebSiteにアクセスして行うんだけど、従来はアプリ内からSilicaWebViewでサイトを開いてログインしてたんだよね。(だってその方が簡単だったんだもん・・・)

ところが、現状SilicaWebViewで表示したサイトだとCAPTCHA認証がうまく操作できない。
画像の選択まではできるんだけど、なぜか認証のボタンが押せない・・・
デスクトップ(Qt 5.11辺り)でWebViewを使って試した時には問題なく認証できるので、どうやらSilicaWebView固有の問題っぽい?

という訳で、認証の操作自体は外部ブラウザでやるように変更することにした・・・

が、はっきり言って何をどうしていいのか分からない。そもそもそこまでのプログラミングテクニックなんて持ってない。ということでGoogleさんにお尋ねしたところ、参考になりそうな情報が・・・
ぱっと見これだけ見ても何をどうすればと思ったりはしたけど、昔のTwitter4QMLのコードとかいろいろ動いてるものを参考にしてどうにかこうにか動くものができた。
まぁ、ブラウザでのログインが完了したらフォーカスをアプリに戻したいとか、いろいろ足りないところはあるんだけど、とりあえずログインはできるようになったから良しとしよう。(7/21現在、なんかうまくいかない事例があるっぽい・・・調査中)

ということで、とりあえずarmv7hl版およびi486版については2021/07/21付けでストアに公開されている。めでたい。

が、最後の難関。aarch64版をどうするかという話。
実はわりと最近、Xperia 10を(中古で)入手してXperia Xを導入してたもんだから、これでaarch64周りもいけるだろうと思っていたんだけど・・・
結論としては、このXperia 10、OSとしては残念ながらaarch64ではないっぽい・・・これを書いている時点では、正式にaarch64なOSになっているのはXperia 10 IIのみということらしい。

正直、実機がないとテストはできないけど、実機がなくてもパッケージはビルドできるはずなんだよね・・・ということでいろいろ情報探したところ、Jollaがリリースしてるドキュメントがあった。
こーゆードキュメント類がちゃんとしてるのがJollaのいいところだよね。
そんなわけで、下のような手順でビルドしてみた。
今回はVirtualBox環境(最近はビルド環境にDocker版がある)での実行。
# mkdir build
# cd build
# ~/SailfishOS/bin/sfdk tools list
sfdk: [I] Starting the build engine…
SailfishOS-4.1.0.24              sdk-provided,latest
├── SailfishOS-4.1.0.24-aarch64  sdk-provided,latest
├── SailfishOS-4.1.0.24-armv7hl  sdk-provided,latest
└── SailfishOS-4.1.0.24-i486     sdk-provided,latest
# ~/SailfishOS/bin/sfdk config target=SailfishOS-4.1.0.24-aarch64
# ~/SailfishOS/bin/sfdk qmake ../harbour-qayttamaton _ID="client_id" _SECRET="client_secret" _URL="redirect_url" _FS_ID="foursquare_client_id" _FS_SECRET="foursquare_client_secret" _FS_VERSION="########"
# ~/SailfishOS/bin/sfdk make
# ~/SailfishOS/bin/sfdk make-install
# ~/SailfishOS/bin/sfdk package
# ~/SailfishOS/bin/sfdk misc stop-vms
これで build/RPMS にパッケージ類が完成しているはず。

単にビルドするだけなら"~/SailfishOS/bin/sfdk build ../harbour-qayttamaton"だけで行けるんだけど、ソース的に公開される部分にclient idやcliento secretを直接入れずに済むようにしている関係でqmakeにオプションを渡す必要があるので、ちょこっと工程を分解。

上の手順だと「sfdk tools list」を叩いた時点でBuild Engine(mersdk)が動き出す(その後のBuild工程でも動いている必要がある)ので、"misc stop-vms"で停止させないと動きっぱなしになる気がするので、ちゃんと止めておく。
(もちろん事前にVBoxManagerとかで起動しておいて、別で止めてもOK)

これでパッケージ自体はできる。
同じ方法で作成したarmv7hl版、i486版がちゃんと動いているから、多分大丈夫だろう。
テストもしてないパッケージを投げるのもどうかとは思ったけど、とりあえず今日QAに投げてみた。これまでの例からも、JollaのQAはそれなりにちゃんとテストしてくれるから、テストしてもらっちゃおうっと・・・

ということで、QAの結果が出たら追記する予定。

#2021/08/20 追記
aarch64なパッケージ付きの更新申請がQAと通ったので、多分OKなはず。
ただし、aarch64な端末のストアからちゃんとaarch64なパッケージをインストールできるのかはわからない(端末持ってないからなぁ・・・)