- 1. iOSアプリケーションのリバースエンジニアリングガイドを作った
- 2. [Swift5]Realm Swift – サンプル#1
- 3. 【ObjectiveC】ナビゲージョンバーの背景を変更する
- 4. iOSアプリのPassword AutoFillでユーザーとパスワードの入力画面を分けるには
- 5. Password AutoFill のためのiOSアプリとドメインの関連づけが Firebase App Distribution ではうまくいかなかった
- 6. ReactNativeアプリをAppDistributionにfastlaneでデプロイする方法
- 7. CombineのPublishers.Sequenceのmap
- 8. iOS Simulatorのステータスバーの表記をカスタマイズする(iOS13)
- 9. iOSアプリBuild時に「Unable to install “アプリ名”」と表示されるがXcodeの設定で解決
- 10. MVVMでiOSアプリをつくってみた
- 11. Swift Firebase ユーザーのアイコンとニックネーム登録(Storage & Authentication)
- 12. 【iOS13】BackgroundでPush通知を受け取ってもdidReceiveRemoteNotificationが呼び出しされない
- 13. Android, iOSでダイアログが表示されているか確認する方法
- 14. Swift Firebase 匿名認証(anonymously Authentication)
- 15. GitHub+JenkinsでUnity製iOSアプリの自動ビルドと実機への自動インストール
- 16. 【Swift】Result型を使ってみた
- 17. NWPathMonitorのハマりどころ
- 18. Neural Engineで処理されているか調べる方法
- 19. [iOS] Firebase + fastlaneでdSYMアップロード
- 20. Flutter環境構築 – 3(Android Studio・Androidエミュレータセットアップ編)
iOSアプリケーションのリバースエンジニアリングガイドを作った
iOSアプリケーションのリバースエンジニアリングガイドを作ったので公開します。日本語です。書きかけです。
ARMアセンブリの読み方とかlldbの使い方に関しても書いてるので興味のある方はぜひ。
[iOS App RE Guide](https://4masaka.github.io/iOS-App-Reversing-guide/)
– [ARMアセンブリの読み方](https://4masaka.github.io/iOS-App-Reversing-guide/docs/side-content/arm-assembly)
– [lldbの使い方](https://4masaka.github.io/iOS-App-Reversing-guide/docs/side-content/lldb)
– [有用なツール集](https://4masaka.github.io/iOS-App-Reversing-guide/docs/side-content/useful-tools)また、Githubで編集してるのでPRも募集してます。何卒……!
https://gi
[Swift5]Realm Swift – サンプル#1
iOS で`Realm Swift` を 調査し、サンプルを作成してみました。
# Realm Swift
プロパティの定義① `dynamic` キーワードと`@objc`
・`dynamic` キーワードを使いたい場合、明示的につける・理由:内部で Objective-C で書かれた専用のアクセスメソッドに置き換えられるため
※参照資料
[ドキュメント](https://realm.io/docs/swift/3.20.0/)
[Realm Swift GitHub](https://github.com/realm/realm-cocoa)
[RealmSwift-introduction](https://dev.classmethod.jp/articles/realmswift-introduction/)## 動作環境
– Swift 5.0
– Xcode 11.1
– Carthage
– github “realm/realm-cocoa” == 3.20.0## Sample コード
*使用方法は後ほど。。。
*throws ?
【ObjectiveC】ナビゲージョンバーの背景を変更する
# はじめに
ナビゲーションバーを色々設定したいなと思った時にメモとして残しておきます。
~~~ObjectiveC:Appdelegate.m
UINavigationBar *navibar = [UINavigationBar appearance];
~~~この処理を書くことで、全体的な UINavigationBar に適応されます。
## ナビゲーションバーの背景をイメージで設定する
~~~ObjectiveC:Appdelegate.m
// ナビゲーションバーの背景をイメージで設定する
– (void)setupNavigationBar {
UINavigationBar *navibar = [UINavigationBar appearance];
UIImage *image = [UIImage imageNamed:@”navigation_bar_image”];
[navibar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}~~~
※ イメー
iOSアプリのPassword AutoFillでユーザーとパスワードの入力画面を分けるには
[前回の投稿](https://qiita.com/temoki/items/023364f15dd8a56874b1)に引き続き、iOSアプリのPassword AutoFillに関する投稿です。
## 一般的なログイン画面の場合
一般的なログイン画面を作ろうとすると、ユーザー(メールアドレス等)とパスワードを入力するフィールドが並んだこんな画面になると思います。
この場合、ユーザーとパスワードの [UITextField](https://developer.apple.com/documentation/uikit/uitextfield) の [textContentType](https://developer.apple.com/documentation/uikit/uitextinputtraits/1649
Password AutoFill のためのiOSアプリとドメインの関連づけが Firebase App Distribution ではうまくいかなかった
開発中のiOSアプリのログイン画面に **Password AutoFill** 機能を組み込んで実機でのテストしているとき、ログイン情報の候補がキーボードの QuickType バーに表示されないという現象で苦労しました。
結論としては [Firebase App Distribution](https://firebase.google.com/products/app-distribution?hl=ja) でアプリをインストールした時のみ、アプリとドメインとの関連づけがうまくいかないことが原因だったのですが、その調査に苦労したため過程をメモとして残します。
## はじめに
**Password AutoFill** とはiOS11から提供された、ログイン情報(ユーザーやパスワード)を自動入力する機能です。これをログイン画面に仕込んでおけば、Keychainなどのパスワードマネージャーに保存されているログイン情報を自動入力することができます。以下は Twitter のログイン画面ですが、キーボード上部の QuickType バーに自動的に twitter.com 用のログ
ReactNativeアプリをAppDistributionにfastlaneでデプロイする方法
## はじめに
今回はfastlane公式ドキュメントにReactNativeでfastlaneを導入する方法が書いていなかったので、その方法について、AppDistributionでのiOSアプリのベータ配布をする方法と共に書いていきたいと思います!!## fastlaneとは
[fastlane](https://fastlane.tools)とはiOS, Android, flutter, ReactNative等で使用できるツールです。テスト実行, iOSの証明書発行, Beta配布, リリース等のあらゆるタスクを半自動化してくれるツールです。詳しくはfastlaneの[公式ドキュメント](https://fastlane.tools)をご覧ください!!## AppDistributionとは
AppDistributionとはfirebaseが提供するベータ配布用のツールです。TestFlightとは違い、審査というものが一切ないので開発チーム内でのベータ配布に便利です。[公式ドキュメントはこちら](https://firebase.google.com/docs/a
CombineのPublishers.Sequenceのmap
Combine.frameworkで遊んでいて `Publishers.Sequence` の `map` が興味深い動作をしたので、雑にまとめておきます。
実行に使った環境はXcode 11.4.1のPlayground(PlatformはiOS)です。
## mapしたものを複数回購読すると
まずは、以下の `PassthroughSubject` の `map` の動作を見てください。
“`swift
var cancellables = Set()
let publisher = PassthroughSubject() // mapオペレーターで値を10倍する
let kakeru10 = publisher
.map { (value: Int) -> Int in
let result = value * 10
print(“mapping \(value) -> \(result)”)
return result
}// 2箇所で購読す
iOS Simulatorのステータスバーの表記をカスタマイズする(iOS13)
参考元: https://www.jessesquires.com/blog/2019/09/26/overriding-status-bar-settings-ios-simulator/
### 確認環境
Xcode: 11.4.1
iOS: 13.4.1### 手順
iOSシミュレータが起動した状態で、ターミナルで下記のコマンドを実行“`bash
xcrun simctl status_bar “iPhone SE (2nd generation)” override –time 10:00 –dataNetwork wifi –wifiMode active –wifiBars 3 –cellularMode active –cellularBars 4 –operatorName “docomo” –batteryState charged –batteryLevel 100
“`
Before:
![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/
iOSアプリBuild時に「Unable to install “アプリ名”」と表示されるがXcodeの設定で解決
#問題の概要
* Xcodeにて、Swiftを使ってアプリ開発(iPhone実機)をしていた.
* 今まで実機インストールして動作確認できていたが、突然「Unable to install “アプリ名”」と表示されてインストールできなくなった.
* Apple Developer Programには登録していない状態.#問題の詳細
新しいプロジェクトを作ってビルドしたら、下記メッセージが表示された.“`
Unable to install “アプリ名”
“`
Detailsボタンで詳細を見られるみたいなので、押してみたら、下記内容.“`
DetailsUnable to install “アプリ名”
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402620383
—
The maximum number of apps for free development profiles has been reached.
〜略〜
“`#環境
* Xcode 11.4
* Swift 5.2#試したこと
MVVMでiOSアプリをつくってみた
# はじめに
以前書いた[今更MVCとかでiOSアプリつくってみた(Swift)・改](https://qiita.com/am10/items/1a877dc2939962a40aaf)の続きです。なんか面談のときにちょこちょこアーキテクチャについて聞かれたので今度は MVVM について考えてみます。前記事でも書きましたが、アーキテクチャについてネットで色々検索すると言ってることがそれぞれ微妙に違うのがいっぱい出てきます。アーキテクチャについて学びたいと思うなら [iOSアプリ設計パターン入門](https://peaks.cc/books/iOS_architecture) を読みましょう!
この記事は [iOSアプリ設計パターン入門](https://peaks.cc/books/iOS_architecture) を参考にしていますが、あくまで私個人の意見です。
わりと長くなったのでめんどくさい人はソースだけでもどうぞ:bow:
* [VC3つのみでつくったやつ](https://github.com/adventam10/SwiftArchitecture2/tre
Swift Firebase ユーザーのアイコンとニックネーム登録(Storage & Authentication)
# 概要
– iOSアプリを開発している
– Firebaseを使いたい
– ユーザーのアイコン、ニックネームを登録したい# 説明
現在開発中のアプリ(クイズのオンライン対戦)でユーザーのアイコンとニックネームが必要となりました。
概要のとおり、個人アプリを開発時に良くあるケースですが、
Qiitaなどでサンプルコードがすぐに見つからないので共有しておきます。# 要件
– アイコンをタップするとpickerでphotoLibraryから画像選択
– ニックネームはtextFieldで変更
– 保存ボタンタップ時にputData()でアイコンをstorageに登録
– アイコンurlとニックネームを更新# 結果
# サンプルコード
“`swift
import Foundation
import
【iOS13】BackgroundでPush通知を受け取ってもdidReceiveRemoteNotificationが呼び出しされない
Firebase Cloud Messagingを用いて開発した際、躓いたポイントだったので備忘録として書きます。
# Push通知受信後、バックグラウンドで処理を行う
Remote notificationでは、Push通知を送信する際に、送信側リクエストボディに“`
“content_available” : true
“`
を付与することで、バックグラウンド状態でPush通知を受信した際に“didReceiveRemoteNotification“メソッドが呼び出されバックグラウンドで最大30秒程度処理を行うことができます。
30秒程度と記述しているのは、OS側で処理時間を短くする場合があるためです。そのため本メソッドでは、重い処理を行わずアプリがフォアグラウンドになった際に情報を更新するためのトリガー実行のフラグを立てるような簡単な処理を行うことが適しています。# iOS13.0 ~ iOS13.3.1までのiOSでは、動かない
iOS11,iOS12でのテスト時にアプリがバックグラウンドになっていても、“didReceiveRemoteNotificat
Android, iOSでダイアログが表示されているか確認する方法
# Android
アプリがフォアグランドにいる時にActivityのフォーカスが失われたら、ダイアログが表示されたと判断する
“`kotlin
class MainActivity : AppCompatActivity() {var isDialogVisible = false
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
isDialogVisible = false
} else {
if (lifecycle.currentState == Lifecycle.State.RESUMED) {
// アプリがフォアグランドにいる時にフォーカスが失われたら、ダイアログが表示されたと判断する
isDialogVisible =
Swift Firebase 匿名認証(anonymously Authentication)
# 概要
– iOSアプリを開発している
– Firebaseを使いたい
– ユーザーを識別したい
– 気軽に利用できるアプリにしたい
– 無駄にセキュリティ情報を保持したくない(メールアドレスは管理したくない)# 説明
現在開発中のアプリ(クイズのオンライン対戦)でユーザーの識別が必要となりました。
概要のとおり、個人アプリを開発時に良くあるケースですが、
Qiitaなどでサンプルコードがすぐに見つからないので共有しておきます。
(Firebase Storageによる画像の登録は次回共有します)# 要件
– アプリ起動時に匿名認証する
– ユーザーが存在する場合
– NavigationBarにユーザーが設定したアイコンとニックネームを表示
– ユーザーが存在しない場合
– NavigationBarにdefaultアイコンとニックネーム(未設定)を表示# 結果
GitHub+JenkinsでUnity製iOSアプリの自動ビルドと実機への自動インストール# はじめに
研究でiOSデバイスを3~4台使うアプリケーションを開発することになったのですが、以下の手順を手作業でやるのは流石にしんどいと思ったので、2~5までを自動化しました。
![manual.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/f76e4412-e935-66bc-64f7-134214a1754e.png)
1. 普段使いのWindows PCからGitHubへ変更をpush
2. 手元のMac PCでそれをpull
3. UnityプロジェクトをビルドしてXcodeプロジェクトの作成
4. Xcodeプロジェクトををビルドしてipaの作成
5. ipaを手元の実機3~4台へインストール![auto.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/074b2cd1-36ce-53c5-d4fc-8352d32b6c28.png)
1′. push時のGitHubからのW
【Swift】Result型を使ってみた
Swift5.0以降でResult型が正式採用されました?
この前Loaderを新規で書く機会があって、Result型使えるじゃん! と思って使ってみました。# Result型とは
– success/failureの2パターンだけもつEnum
– エラー処理をswitch文を使ってシンプルに書ける
– 実際の定義は下記“`swift
public enum Result{
case success(Success)
case failure(Failure)
}
“`– ジェネリクス型なので、Success/Failureの型は開発者が指定してやる必要がある
– Swift5以前だと、オリジナルでこの手のResult型っぽいEnumを自分で書いていたりライブラリ入れたりしていたと思うので、それはもはや要らない# 使い方
たとえばLoaderのDelegateメソッドで、Result型を返す仕様にするとしたら、下記みたいに書きます。“`swift:DataLoaderDelegate
prot
NWPathMonitorのハマりどころ
# currentPathはstartするまで正しい値が返らない
Reachbilityの気分でcurrentPathを呼ぶと上手く取れない
“`swift
let monitor = NWPathMonitor()
print(monitor.currentPath.status) //unsatisfied
“`startすると正しい値になる
“`swift
let monitor = NWPathMonitor()
monitor.start(queue: .global(qos: .background))
…
print(monitor.currentPath.status) //satisfied
“`# NWPathMonitorはすぐに反映されない
start直後は正しい状態に反映されないことがある。
“`swift
let monitor = NWPathMonitor()
monitor.start(queue: .global(qos: .background))
print(monitor.currentPath.status)
Neural Engineで処理されているか調べる方法
書籍「Core ML Survival Guide」やOSS「CoreMLHelpers」でCore ML界隈で知らない人はいないMatthijs Hollemans氏が、GitHubでNeural Engine(ニューラルエンジン)のドキュメントのリポジトリを開設した。
https://github.com/hollance/neural-engine
Core MLのポテンシャルを最大限引き出す鍵となるNeural Engine。それについてなぜAppleではなく氏がドキュメンテーションを行うのかというと、**Appleは開発者向けの情報はほとんど何も出してない**からだ。(これについては個人的には何かしらの進展を次のWWDCで期待している…)
というわけで、氏がNeural Engineについて現状把握していることをまとめてくれたのが本リポジトリ。公開APIはない中で、プライベートフレームワークを利用してモデルの処理においてANEが使用されているか(あるいは使用されておらずCPUやGPUで処理されているか)を調べる方法や、そういった手法を用いてどういった種類のレイヤーは
[iOS] Firebase + fastlaneでdSYMアップロード
## 始めに
最近、dSYMのアップロードがFirebaseのコンソールからはできなくなっており、コマンドラインからしか受け付けなくなっていた。
なので、AppStoreからダウンロード・Firebaseにアップロードをfastlaneで自動化した。## 目次
1. 前提
2. fastlaneをインストールと初期化
3. Appfileをセットアップ
4. Fastfileを編集
5. 実行してみる## 前提
– 基本的なXcodeとiOSの知識がある
– Terminalの操作ができる
– FirebaseでCrashlyticsの設定まで完了している
– https://firebase.google.com/docs/crashlytics/get-started?hl=ja
– BitcodeをOnにする
– [AppStoreConnect](https://appstoreconnect.apple.com)にアプリをアップロードしたことがある
– アップロードできる権限がある## fastlaneのインストールと初期化
[公式](h
Flutter環境構築 – 3(Android Studio・Androidエミュレータセットアップ編)
#はじめに
今回はFlutter環境構築第3弾 「**Android Studio・Androidエミュレータセットアップ編**」です!
Flutter SDKのインストール・Flutterコマンドのセットアップがお済みでない方は、
先に「Flutter SDKインストール編」をご覧ください。**Flutter環境構築シリーズ**
・[Flutter環境構築 – 1(Flutter SDKインストール編)](https://qiita.com/naru_chan__/items/359fcdfb8aa092e9a44e)
・[Flutter環境構築 – 2(Xcode・iOSシミュレーターセットアップ編)](https://qiita.com/naru_chan__/items/d64455cb7d0e7dd223a5)
・[Flutter環境構築 – 4(VSCodeセットアップ編)](https://qiita.com/naru_chan__/items/1cf6f3d43beb97698592)#「Android Studio・Androidエミュレータセットアップ編」