[iOS] ベースクラスのextensionを、protocolで実装する話

2019/05/29

こんにちは。きんくまです。

Swiftのextensionは大変便利で、いろいろなクラスに対して拡張実装を作ることが可能です。

例えば

extension UIViewController {
    func showAlert(title: String?, message: String?, callback: @escaping () -> Void) {
        let alertController = UIAlertController(title: title,
                                                message: message,
                                                preferredStyle: .alert)
        let okAction = UIAlertAction(title: "OK",
                                     style: .default) { action in
            callback()
        }
        let cancelAction = UIAlertAction(title: "Cancel",
                                         style: .cancel,
                                         handler: nil)
        alertController.addAction(okAction)
        alertController.addAction(cancelAction)
        present(alertController, animated: true, completion: nil)
    }
}

こんな感じに、UIViewControllerに対して、アラートを出すことができるメソッドを定義することができます。

ただ、個人的にはこういう全ての場面で共通で使いそうなクラス(この場合UIViewController)に対して拡張を書くというのが、気になるなーと思いました。どこが気になるかというと、

– クラスを拡張していることが、クラスの定義のところを見るだけだと気づかない
– 使う必要のないクラスにも適用されてしまう

という感じでしょうか。例えば、上のコードだと、アラートを出す必要のないUIViewControllerにも拡張されてしまいます。

この投稿の続きを読む »

LINEで送る
Pocket

[iOS] RxSwiftのmapとflatMapの違い

2019/03/2

こんにちは。きんくまです。

今回はRxSwiftのmapとflatMapの違いについていまいちわかってなかったので、まとめです。

Rxは観測するObserverと、観測されるObservableという大事な概念があります。
で、それと同じくらい大事なのが、流れを作るSequenceと、その中を流れるElementということだと思いました。
これをイメージしておくと、とたんにわかりやすくなりました。

Observableというのは、SequenceでElementを流すやつ。みたいな。

PublishSubject/Single/Observable などは Sequence です。どんなイベントを発行するか決定します。逆にいうと、どのイベントを発行しないかというのもポイントになってきます。

そのイベントにともなって、Elementを流したりします。(completedのときなどelementを流さないイベントもあるのでこんな表現)

この投稿の続きを読む »

LINEで送る
Pocket

[AIR] Adoebe AIRで、AndroidのFileProviderを使ったANEを作りたい

2019/03/2

こんにちは。きんくまです。

もうやっている人もいないと思うので、個人的なメモです。その2

Androidです。Intentで他のアプリに、Uriを連携したいです。

以前は以下のようなことができていました。

File file = new File("path");
Uri myuri = Uri.fromFile(file);

それで、バージョンがあがってセキュリティが厳しくなって、この方法だと他のアプリに連携できなくなっていました。
調べたところ、FileProviderというのを使うといいみたい。

FileProvider | Android Developers

file:// 形式じゃなくて、 content:// 形式で送ります。詳しい実装方法は他にゆずります。

それで、これを使ったANEを作りたかったのだけど、すごくハマってしまい時間がかかってしまいました。

大いなる参考サイト
DigitalStrawberry/ANE-Share: Adobe AIR native extension for sharing text and bitmap content.

このソースをみつつやっていたのですが、細かいところでAndroid Studioのバージョンが上がっていたりして、うまくいきませんでした。
この投稿の続きを読む »

LINEで送る
Pocket

[AIR] iOS11や12でAdoebe AIRでアプリアイコンが表示されない

2019/03/2

こんにちは。きんくまです。

もうやっている人もいないと思うので、個人的なメモです。

AIRをパッケージした後、iOS12のiPadでアプリアイコンが表示されず、デフォルトの指定していない状態になってしまうことがありました。
パッケージの中にiPad用のアイコン画像もあり、application用のxmlにもちゃんとアイコンを指定しているのに表示されません。

解決 Assets.carファイルを追加する

Adobeの公式にしれっと書いてありました。

Note: 1. Starting AIR 28, Assets.car needs to be packaged along with application xml and swf file for the icons to be visible on devices having iOS 11 and above.

なんか iOS11以降は Assets.car ファイルというのを作って、パッケージの中に含める必要があるとのこと。もっと大きく書いてくれてもいいのよ!!

こちらのページのやり方だとXcodeを使って簡単にできるらしいです。
Icons and the Assets.car file

この投稿の続きを読む »

LINEで送る
Pocket

[Android] ファーウェイの端末で I/HwSecImmHelper: mSecurityInputMethodService is null の表示がでたら電話する

2019/02/24

こんにちは。きんくまです。

ちょっと前に開発用端末用に、ファーウェイのP20 Liteというのを買いました。Android 8 です。
HUAWEI P20 lite

それで、ちょっと調べ物があって、Logcatを見ていたのですが、こんなメッセージがあって詳細がわかりませんでした。

I/HwSecImmHelper: mSecurityInputMethodService is null

調べたところ、どうやらこれはファーウェイ端末が独自で出しているものらしい。
パフォーマンスに影響があるという理由で、詳細なエラーメッセージを消しているみたいなんですね。

Huaweiの端末はAndroidアプリのログを握り潰す – ashiato45の日記

mSecurityInputMethodService is null in logcat – Stack Overflow

それで、この状態を解除してちゃんとエラーメッセージを吐かせる設定方法が面白くて、何と電話をかけるというもの。知ったときに、ちょっとウケてしまったw

*#*#2846579#*#*

実際にやってみます。

この投稿の続きを読む »

LINEで送る
Pocket

[iOS] RxSwiftのPlaygroundのサンプルの出力

2019/02/2

こんにちは。きんくまです。

RxSwiftを勉強中です。それで、いろいろと調べていたのですが、イマイチ全体像が見えてこない!
でこれは何なのか?と考えたら、一番の基本となるものが何なのかわからないことに気がつきました。

そんなとき、公式のリポジトリにあるPlaygroundを写経してみたところ、ベースとなるものがわかった気がしました。

で、もう少しいろいろと調べないといけないのですが、毎回「これって何するやつ?」というのを調べるのが面倒くさいです。

なので、このページにPlaygroundに乗っていたやつを1ページに全て書いてしまい、Cmd + f で検索できたら出力がすぐに確認できて便利だなーと思った、メモ記事になります。

コードは基本的にPlaygroundのままなのですが、公式のやつは絵文字ばっかりつかってて、見づらいので普通のアルファベットとかに直しています。

バージョン

    pod 'RxSwift',    '~> 4.4.0'
    pod 'RxCocoa',    '~> 4.4.0'

この投稿の続きを読む »

LINEで送る
Pocket

[iOS] Alamofireでdownloadしたらnilになる

2019/01/26

こんにちは。きんくまです。小ネタです。

Alamofireの使い方のチュートリアルをやっていました。

>> Alamofire/Documentation/Usage.md

だいたい一通りやってみたのですが、1箇所だけうまくいきませんでした。
download の部分です。レスポンスの中身がnilになってしまいました。

この投稿の続きを読む »

LINEで送る
Pocket

ページトップへ戻る