頭のメモリが少ない

プログラミングと日々の生活

Xcode12でビルドできるようにするまで

Xcode12でビルドできるようにするまで

  • 実機のビルドだけであれば特に下記の内容対応する必要がないが、エミュレータを指定してビルドを行うとコケる。

使用したXcode

Xcode Version 12.0 (12A7209)

対応内容

  • Podfileの修正
  • Carthageビルド用のスクリプト追加
  • Build Settingsの修正

Podfileの修正

  • Podfileに下記を追加
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
    end
  end
end

ref: https://stackoverflow.com/questions/63607158/xcode-12-building-for-ios-simulator-but-linking-in-object-file-built-for-ios

Carthageビルド用のスクリプト追加

$ curl https://gist.githubusercontent.com/skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5/raw/4ba422e5f3a5e7e37cdcb1e232058c5431fc59fc/carthage-xc12.sh -o wcarthage && chmod +x wcarthage
$ ./wcarthage bootstrap --platform iOS --cache-builds --no-use-binaries

ref: https://gist.github.com/skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5

Build Settingsの修正

  • Xcode -> Target Project -> Build Setting -> Excluded Architectures > "arm64"
  • Xcode -> Pod Target -> Build Setting -> Excluded Architectures > "arm64" f:id:chick-developer:20200924154755p:plain

  • Xcode -> Target Project -> Build Setting -> VALID_ARCHS > "x86_64"を追加 f:id:chick-developer:20200924154526p:plain

https://github.com/CocoaPods/CocoaPods/issues/10059#issuecomment-695876995

iOS メモ

画像の色を変える

UIImageRenderingMode.AlwaysTemplate

  • UIImageRenderingModeAlwaysTemplate:テンプレート画像として描画し、色は指定したTintColorに従う

UIImageView の場合

let imageView = UIImageView(image: UIImage(named: "HeaderLogo")?.imageWithRenderingMode(.AlwaysTemplate))
imageView.tintColor = UIColor.greenColor()

UIButton の場合

let button = UIButton(frame: CGRectMake(0, 0, 100, 30))
let backImage = UIImage(named: "BackButton")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
button.setImage(backImage, forState: UIControlState.Normal)
button.tintColor = UIColor.greenColor()

File URL not reachable

File URL not reachable

iOS13から発生。ギャラリーから選択したVideoをアップロードしようとしたらエラーが発生した。

解決方法

  • 1.一時ファイルにコピーをする(ImagePickerControllerのdismissを呼ぶ前にやること、下記のエラーがが発生するため)

iOS 13 SDK consider photo app as an another app, so when we dismiss the image picker controller video url will be invalidate.

  • 2.NSData型にしてからアップロード(ファイルサイズでかいと問題になるので注意)

参考

https://stackoverflow.com/questions/57798968/didfinishpickingmediawithinfo-returns-different-url-in-ios-13/58099385#58099385 https://stackoverflow.com/questions/58104572/cant-upload-video-to-firebase-storage-on-ios-13 https://stackoverflow.com/questions/58081267/nscocoaerrordomain-code-257-file-couldn-t-be-opened-because-you-don-t-have-permi

3ヶ月間セブ留学した後に感じるやっておけばよかったこと

f:id:chick-developer:20170928165834j:plain まぁnothingだったんですけどね...

3ヶ月間セブ留学した後に感じるやっておけばよかったこ

仕事を休ん(辞めて)でセブで三ヶ月留学していました。

英語力ですが伸びたかと言われれば、結論から言えば伸びました。
だけど最初に自分が想像していた程かと言われれば、全然足りない。
また、セブでの生活は決して快適なものではないです。
例えばシャワーは弱いわ、学校の飯は美味くないわ、街は汚い、雨が降ったらネットワークが繋がらなく、朝から晩まで犬猫鶏が煩い、そこら中にハエがいる、ゴキブリだってそこら中に…etc まぁ大体こんな感じですがみんな一週間もいれば慣れていました。

そんなセブ留学した後に感じたことをまとめてみました。 今後、フィリピン留学に希望をいだいているあなたのために。

留学前にやればよかったこ

  1. 文法(Grammer)
    文法を英語で説明されますが、意外となんとかなるものです。 ですが、中学校で教わる文法くらいまでは予め学んでおくとよいです。

  2. 単語(Vocabulary)
    フィリピンに来てから勉強してもいいですが、ほぼ毎日知らない単語が出てくる日々なので、予め基本的な1000語は学んでおくといいです。

  3. 授業で使う英語
    もう一度言って?、どうやってそのスペリング書くの?、この単語の発音教えて?とか基本的なフレーズを使えるようになっておくと便利です。

留学中の過ごし方

授業

セブに留学する前はたくさん授業を入れたほうが自分の英語力が伸びると思っていました。ですが、これだと授業の復習、自習する時間が取れなくなってしまうので無理にたくさん授業取る必要はないと思います。
私の場合は、8コマ(グループ2コマ、マンツーマン6コマ)* 50分で授業を取っていました。 通っていった学校では自分で授業を選択できるのでマンツーマンはSpeaking 2コマ、Pronunciation 1コマ、Reading 1コマ、Listening 1コマ、Grammar 1コマにしていました。

  • 文法の授業
    文法の先生は気をつけたほうがいいです、これはフィリピン人英語は喋れますが文法に関してはちゃんと勉強している先生でないと、なぜその文法なのかを正しく説明してくれない場合があるので先に何が得意なのかを聞いて授業を決めるのがおすすめです。

  • グループ授業
    正直自分はあまり効果的ではないと感じることのほうが多かったです。 というのも、結局英語が不得意同士の人で集まって授業を受けているので、マンツーマンに比べると一回の授業で得る情報量が圧倒的に少ないです。

友達

学校の先生誘って旅行行くとかすると遊びながら英語の勉強出来ておすすめです。 先生の分の旅行費用は出す必要があるのでその分は余計にかかりますが、値段以上の物が得られると思います。 あと、学校の先生以外で現地の友達作るのはおすすめです。 これ一見難しいように思えますが、私の場合はCLE、JEEこの二つのイベントに参加して現地の友達を作りました。

寿司はほぼ無理です。。。諦めてください。 日本料理レストランもありますが値段がそこそこ(日本と同じ値段)します、こっちの物価を考えたらかなり高いです。 それとフィリピンの食はとても油っぽいので気をつけてください、一緒の時期にはいった子で一人、胃酸過多になっていました。

参考書

日本から持っていった参考書。
教材に関してはこれで足りなかったかと言われると、特に授業で教科書渡されるので特に問題ないと思います。

文法

  • 一億人の英文法 ――すべての日本人に贈る「話すため」の英文法(東進ブックス)
    頻繁に使いました。文法の授業は英語で説明されるためどうしてもわからないところはこの参考書を使って補っていました。

一億人の英文法 ――すべての日本人に贈る「話すため」の英文法(東進ブックス)

一億人の英文法 ――すべての日本人に贈る「話すため」の英文法(東進ブックス)

単語帳

  • 究極の英単語 SVL Vol.1 初級の3000語

究極の英単語 SVL Vol.1 初級の3000語

究極の英単語 SVL Vol.1 初級の3000語

辞書

  • ウィスダム英和・和英

ウィズダム英和辞典 第3版

ウィズダム英和辞典 第3版

日本でこの英和辞書(アプリ版)を購入してから行きました。
学校では先生にはこの英英辞書アプリをおすすめされたので、こちらも時々使っていました。

Dictionary - Merriam-Webster
https://play.google.com/store/apps/details?id=com.merriamwebster&hl=ja

もし戻って一冊だけ持っていくなら

  • CD付 ネイティブなら子どものときに身につける 英会話なるほどフレーズ100 (スティーブ・ソレイシィの英会話シリーズ)

留学中にこの本の存在を知り日本に帰って買いたいくらいでした。もし英語に苦手意識があるけど留学しようとしているならまずこれを一冊覚えてから行くとかのほうがいいと思います。フレーズも100しかないので本自体も薄く、だけど日常会話で使うワンフレーズがのっているのでとても留学中とても使い勝手がよく先生とコミュニケーション取りやすくなると思います!

CD付 ネイティブなら子どものときに身につける 英会話なるほどフレーズ100 (スティーブ・ソレイシィの英会話シリーズ)

CD付 ネイティブなら子どものときに身につける 英会話なるほどフレーズ100 (スティーブ・ソレイシィの英会話シリーズ)

【Retrofit2】baseUrlでhostnameより後のパスが削られる

地味にハマったので残しておきます。
Retrofit.BuilderのbaseUrlに"http://xxx.xxxx.xxxx/yyy/“と設定したのにもかかわらず、 APIを叩く時にhostより後ろのpath部分が落ちてしまい"http://xxx.xxx.xxx/hoge"となってしまう場合があります。

これは、HTTP APIJava Interfaceの定義ミスでした。
問題の書き方はこれ

public interface GitHubService {
  @GET("/users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

これだとURLはhttp://xxx.xxxx.xxxx/users/{user}/reposこうなる。

これならおk。

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

これでURLがhttp://xxx.xxxx.xxxx/yyy/users/{user}/reposこうなります。

@GET(/users/...)@GET(users/...)の違いです。
前者の場合はhostNameからの絶対Pathとして解釈され、後者の場合は相対パスとして解釈されbaseUrlと結合出来ます。
適当なところからコピペするからこうなる…(戒めっ)

参考

stackoverflow.com

【初心者歓迎】Kotlin開発Tech Talks 参加レポート

f:id:chick-developer:20170713124133p:plain

【初心者歓迎】Kotlin開発Tech Talks 参加レポート

概要

Google I/Oにて、ついにKotlinがAndroidの正式な開発言語として追加されました。今後より盛り上がっていくと考えられるAndroidでのKotlin利用に関する勉強会を開催します。

この勉強会で登壇するスピーカーが所属する5社は、Kotlinの導入度合いも会社の規模や成長フェーズもバラバラですが、いずれも「ヒトをつなぐ」自社サービスを展開しています。それぞれのサービスでのAndroid開発におけるKotlin利用について、その取り組みやノウハウなどを発表します。

【日時】7月12日(水)19:30~22:00
【場所】スタートアップベースキャンプ オープンスペース
【住所】東京都渋谷区円山町28-1 渋谷道玄坂スカイビル8F
【費用】¥1,000 ※飲み物と軽食をご用意します
【URL】https://connpass.com/event/59898/

■ほぼ毎週リリースアプリのKotlin書き換えの道のり

  • 株式会社葵 近藤 和宏

    Kotlin事情

  • アオイゼミ(iOS, Android, Web版)
  • 去年夏頃よりリニューアル計画
  • 10月には言語や内部仕様、リニューアル内容の決定
  • Kotlinの熱量と書きやすさ採用などを鑑み採用
  • 12月から開発開始
  • 12月末一部KotlinとJavaが併存している状態でリリース

  • ほぼ毎週リリース

  • 1月〜4月までの間、Kotlin Onlyで書き直しているブランチと試作用の2つのブランチを使って開発していた
  • 約20万行以上のコードを書き直し

メリット編

  • null safe
  • 公式サポート
  • 採用にインパクトある

色々あったよ編

  • Android 65K
  • Null safeなKotlinでもnullpointerexceptionは発生する “?"でマーク、コード側で防御、NPEが入り込まないように設計
  • 動画が再生されない事件 一部ユーザーが動画がされない報告が続出
    CDNがHTTP2.0に対応TLS1.1.以下を切り捨てていた
    急なトラブル対応にはまだJavaのコードを読む必要がある

■開発 4 年目のアプリへの Kotlin 導入

speakerdeck.com

ChatWork株式会社 宮下 竜大郎(チームリーダー)
国産のビジネスチャットサービス
最初はTitanium製
Android版(2014年12月からネイティブ)

なぜKotlinを導入するのか?

急ぐ必要はあるのか?
-> 急がなければならない理由はない
あくまでも公式サポート言語が増えただけ

  • それでもKotlinを導入する理由
    • エンジニア的な楽しさ
    • エンドユーザーのメリットにもなる言語機能

      • ボイラーテンプレートを少なく出来る
        • Lambda式
          java8のラムダ式よりもカンタンに書ける(スッキリ書ける)
    • 脳内の処理イメージをコードに反映しやすい
      スコープ関数
      拡張関数
      if, try, when

チームにどう効いていくるか

  • ユースケースを表したコードになりやすい
  • 無駄が無いのでコードレビューがやりやすい、確認と指摘の漏れが少なくなる

気をつけること

  • 7200メソッドほど増える
  • 65Kメソッド制限にぶつかる可能性が高まる
  • kaptが生成するコードに問題があることもある(たまにドハマリ注意)

どう導入を進めていくか

  • すべてのコードをKotlinにするのは先が遠い
  • 部分的にKotlin化していくのがよい、Chatworksでは下記の手順で行った
    • はじめに、シンプルなDialogFragmentをKotlin化して、誰でもJavaのコードがイメージできるように
    • 次に既存のコードを一つKotlin化
    • 新規機能コードをKotlinで追加

課題

  • 何をどこまでKotlinで書くかは定まっていない
  • 非同期処理でasync/awaitを使っていくとか
  • 全員が足並みを揃えられるかどうか
  • チームにとって、ひいてはユーザーの価値になるか
  • Kotlinのコードを負債にしてはいけない

■1年ぶりにやりなおすKotlinアプリ開発

speakerdeck.com

株式会社m-gram 北原 和也

エムグラム正確診断
もうすぐリリース予定
AndroidはKotlinで開発

思ったこと

Annotationプロセッサーを使用しているライブラリをするっと使えるようになっている
Kotlin記事も増えている(一年で倍以上増えている)

一年前のlintの結果がイマイチだった
クラスによってはwarning出たり出なかったりしてまだ使えない印象

Kotlinと一緒に使ったライブ

  • Retrofit2, OkHttp3, rxjava
  • Parceler
    -> Parcelableの実装がクソ楽になる
  • Dart
  • android-state
    -> icepickのkotlin版

■テストから始めるKotlin導入

speakerdeck.com

株式会社エウレカ 二川 隆浩
futabooo

  • Pairsの歴史
    大昔のPairsAndroid
    Scala(90%)
  • 現在
    java 6割
    kotlin 2割

  • 最近リニューアルした、Global版
    Kotlin, ProtcolBuffer

十分に発達したバグはどれも、機能と見分けがつかない
-> 主要な機能でバグが発生

  • テストが書いてあれば防げた
    -> しかし、テストが書ける状態ではなかった

テストが書きやす構成にする
レイヤーをはっきり分ける
詳細は、Activityを改善した話のスライド見て!

■KotlinとJavaの相互運用

コネヒト株式会社 富田 健二
@tommykw

ママリのkotlin導入

  • javaだと冗長、複雑になるコードもすっきり可読性が上がる
  • Swift使いのiOSエンジニアにもなじみやすい文法
  • javaぬるぽを駆逐
  • デメリットが少なかった

導入方針

Kotlin導入結果

10月からスタートして54%導入完了
2割くらいコード行数が減った
簡潔に記述できるようになった

KotlinとJavaの相互運用

難しい点

  • PlatformType
    T!を表す
    IDEAでPlatformTypeだと警告を表示してくれる場合がある
    java側で@nullable, @nonnullを定義する

  • MappedType
    javaとkotlinの型テーブル

  • デフォルトfinal class
    kotlinのクラスはデフォルトfinal
    javaとは異なり、継承する場合にopenをつける

  • 検査例外について
    Kotlin側で@Throwを定義する
    IDEA側で警告を定義する

  • ドキュメント
    コメントの書式が統一出来る
    コメントがまとまっていてコードが読みやすい
    コメントを書くことによって読みやすいコードを意識できる

    • KDoc
      マークダウン記法
    • dokka(htmlとして吐き出してくれる)
      共存したプロジェクトにも対応

メリット

生産性の高さ
コレクションの操作が直感的で楽
学習コストもそれほど高くない
IDEAの補完が強力

デメリット

既存である場合は相互関係の辛さがある

ごちそうさまでした🍕

f:id:chick-developer:20170713123750j:plain

TextViewのAutolink問題

TextViewのAutolink問題

lolipop以上でTextViewでandroid:autoLink="web"と設定すると、余計な文字列までリンクになってしまう場合があります。 例えば、こんな文字列を入れた場合には"Link http://google.com but dont link abra.kadabra"、 http://google.comだけをリンクとしてほしいに、dkra.kadaraもリンクになってしまいます。

というわけで回避方法です。

gist.github.com

参考

https://stackoverflow.com/questions/30528825/android-autolink-is-too-aggressive