麦芽を支える技術

麦芽(ばくが、英語:malt)とは、麦、特に大麦の種子を発芽させたもので、ビール、ウイスキー、水飴の原料となる。(Wikipediaより)

BitriseでSwift Package Manager(SPM)のパッケージをキャッシュする

はじめに

自分のXcodeプロジェクトではライブラリ管理を徐々にCocoaPodsからSwift Package Manager(以下 SPM)へ移行してるんですが、CocoaPodsの時にやっていたのと同じようなBitriseのキャッシュ設定をSPM用にも入れたいなと思いちょっと調べてみました。

で、先に言ってしまうと、調べた結果こちらの記事がとても参考になった(と言うかCIサービスがCircleCIなところ以外はほとんどこれと一緒)ので、気になる方はこちらと併せてご確認ください。

uptech.team

続きを読む

既存APKアプリをGoogle Playアプリ署名・Android App Bundleへ移行

はじめに

既にAPKで公開済のアプリをGoogle Play アプリ署名の利用に変更し、Android App Bundleを利用できるようにするまでのメモです。

現状うまく動いているからあとでいいじゃん、と思い続けて結構長らく放置してたんですが、2021年後半よりGoogle PlayではAndroid App Bundleが必須化されるという公式情報も出ており、いずれやらないといけないなぁと思っていたので今回対応しました。

developer.android.com

既存アプリのリリース署名はJava KeyStoreでやっていたので、今回はそこからの移行作業となります。

f:id:asmz0:20201016120648p:plain:w600

↑このラジオボタンの真ん中のやつですね

続きを読む

Kotlin Multiplatform Mobile (KMM) ことはじめ 〜Hello, World!〜

はじめに

2020/8/31にKotlin Multiplatform MobileがAlpha版へ移行したというニュースが発表されました。

blog.jetbrains.com

私はもともとKotlin Multiplatform Project構成で個人アプリの開発を試していたこともあり、今回のこの新たな発表について割と強い関心を持っていたので、早速触ってみることにしました。

ちなみに、今回やったのはなんら難しいことではなく、公式のGetting startedの序盤部分です。

Getting started - Help | Kotlin Multiplatform Mobile Docs

詳しいことは全て↑こちらに書いてあります。興味がある方はぜひ読んでみてください。

続きを読む

React Native for WebでPWAやってみた

この記事はPWA Advent Calendar 2019の15日目の記事です。

はじめに

私は普段は主にネイティブアプリ(iOS/Android)開発をしておりまして、Webフロント周りは久しく触っていないのですが、ちょっと最近React Nativeを触る機会があり、その文脈で「React Native for Web」というワードを目にしたことで「これでPWAもいけるのでは?」と思い、軽い気持ちで書いてみることにしました。

PWAはWebの技術を使ってネイティブアプリに近い体験を作り出せるところが大きな特徴なので、今回のように元々React Nativeでネイティブアプリを作れる環境からPWAアプリを作るというのは少し違和感はありますが、ちょうど昨日のアドベントカレンダーでdennougorillaさんが書いてくれているように、ネイティブアプリの考え方をWebに持ち込み、シングルコードで多くのプラットフォームで動作するアプリを作れる点は大きなメリットあると考えています。

qiita.com

なお、今回紹介するReact Native for Webは必ずしもネイティブアプリは必要とせず、単独Web開発ツールとしても使えますので、HTMLをあまり書く必要なくWebアプリ、PWAアプリを開発する方法の一つとして「なるほど、こういう開発技術もあるんだな」という感じに捉えてもらっても良いかなと思います。

React Native for Webとは?

Webフロントの世界で生まれたのReact.jsの考えをネイティブアプリの世界に持ち込んだものがReact Nativeなわけですが、それを更にWebの世界に持ち込んだものがReact Native for Webです。

続きを読む

fastlaneでビルドしたiOSアプリがBitrise Shipに反映されない問題の対処

この記事はBitrise Advent Calenderの14日目の記事です。

はじめに

普段はiOSアプリをメインとしたネイティブアプリ開発を生業としておりまして、Bitriseさんには結構長らく大変お世話になっております。(振り返ってみると2015年に使い始めたらしくもう4年...!)

なので、Bitriseの情報は普段から割とチェックしているのですが、最近Bitriseの新しい機能として「Ship」が追加されました。

blog.bitrise.io

ShipはこれまでBitriseのStepとして存在していた「Deploy to Bitrise.io」Stepのアドオンという形で提供されており、これまで通りのStep使いながらもバージョン管理やストアメタ情報など含めた本番アップロードなどの機能を新たに利用することができるようになります。

利用に当たっては、以下のドキュメントの通りいくつかの手順で設定すれば簡単に始められます。

devcenter.bitrise.io

ただここでちょっと私のケースだと詰まってしまったので、その事象と対応について今回ご紹介します。

続きを読む

AndroidのversionCode, versionNameをインクリメントするGradleタスク

AndroidプロジェクトのversionCodeやversionNameは、だいたい1つずつインクリメントしていくだけの場合が多く、コマンド1発で書き換えられるようにしておけば、将来的にCIなどでこの辺の作業を自動化させる時にも楽だよね、というヤツです。

iOSプロジェクトだとfastlaneの increment_build_numberincrement_version_number のActionで同様のことができますが、手元のAndroidプロジェクトだとfastlaneは使わずGradleでほとんどのビルドタスクを実行しているので、自前のGradleタスクとして用意しました。

続きを読む

Xcode11からja_JPロケールのNumberFormatter出力でnbspが入るようになった

事の発端

元々以下のように数値を通貨形式の文字列フォーマットに変換する処理のユニットテスト書いてあったんだけど、Xcode11にしてからテストが失敗するようになってしまった。

let target = 1000
XCTAssertEqual(target.yenFormattedString, "1,000円")  // "1,000 円" is not equal "1,000円"

ちなみに、ここでやっている .yenFormattedString は以下のようなIntのExtension。

extension Int {
    var yenFormattedString: String {
        let formatter = NumberFormatter()
        formatter.locale = Locale(identifier: "ja_JP")
        formatter.numberStyle = .currencyPlural
        return numberFormatter.string(from: self as NSNumber) ?? ""
    }
}

"1,000 円" is not equal "1,000円" と言われているので、の前に半角スペース入るように変わったのかな?と思い、テストを修正してみたら以下のようになった。

let target = 1000
XCTAssertEqual(target.yenFormattedString, "1,000 円")  // "1,000 円" is not equal "1,000 円"

"1,000 円" is not equal "1,000 円" ??

続きを読む