- 1. UIScreenEdgePanGestureRecognizer が Simulator で反応しない件
- 2. 【翻訳】あなたの(多分)まだ知らない iOS パフォーマンスアドバイス(元アップルエンジニアから)
- 3. 新 App Store 審査ガイドライン 翻訳&差分ガイド 2020年3月号
- 4. [iOS]カスタムドキュメントにサムネイルを表示する
- 5. 【Swift】iOS13でStoryBoardではなくXibから起動する
- 6. 初めてswiftでユニットテストを書いてみた
- 7. ViewControllerのviewIfLoaded?.windowが切り替わるタイミング
- 8. Firebase iOS SDKをCarthageで管理する
- 9. 【Swift】UIPickerViewのデフォルト値を変更する
- 10. UILabelやUITextFieldなどで箇条書きをきれいに表示する
- 11. XcodeのBuild PhasesでSwiftスクリプトを実行する
- 12. ‘Showing Recent Issues SWIFT_VERSION ‘3.0’ is unsupported, supported versions are: 4.0, 4.2, 5.0.’について
- 13. Xamarinを勉強し始めたので覚えたことを記録するメモ
- 14. [iOS13] SceneDelegateでDynamicLinksからのURLをハンドリングする
- 15. Xcode 11.4でFlutterの実機デバッグでエラーになった際の対応方法
- 16. ニコニコ動画の動画のタグをApple Musicで検索するショートカット
- 17. iOSでBluetoothの許可設定
- 18. wrap with new widget が消えた (Flutter / IDE)
- 19. gPRC の Server streaming と AVSpeechSynthesizer を使って iPhone に Slack の投稿を読み上げてもらう
- 20. 画像分類モデルをつくってモバイルで動かしてみた
UIScreenEdgePanGestureRecognizer が Simulator で反応しない件
# 今回解決したいこと
iOS 7 から追加された `UIScreenEdgePanGestureRecognizer` を使えば、通常のパンジェスチャー(ドラッグジェスチャー)と違って、画面の左端からパンしたときだけに反応するエッジパンジェスチャーを実装することができます。
しかし、なぜかシミュレーターで実行していると、[本当は反応するはず](https://stackoverflow.com/questions/19127383/is-it-possible-to-do-an-edge-swipe-in-ios-simulator) が、反応しない!!!という罠にはまりました。# 解決法
シミュレーターで、 **ベゼル表示をオン** にすれば画面端からパンすることができます!!!
こう?(ベゼル表示オフ)
【翻訳】あなたの(多分)まだ知らない iOS パフォーマンスアドバイス(元アップルエンジニアから)本記事は[この記事](https://www.fadel.io/blog/posts/ios-performance-tips-you-probably-didnt-know)の日本語訳です。翻訳許可を[いただいております](https://www.fadel.io/blog/posts/ios-performance-tips-you-probably-didnt-know/#comment-4822809038)。
以下翻訳:
—
もし Cocoa 開発やソフトウェアビジネスのブートストラップについての最新の記事を常にキャッチアップしたいなら、ぜひ [Twitter で私をフォロー](https://twitter.com/ronyfadel)するか[メールリストを購読](https://mailchi.mp/bc3065c5892d/fadelio)してください。
![陸上トラック](https://www.fadel.io/blog/public/racetrack.jpg)
開発者として、パフォーマンスの良さは我々のユーザにワクワクと嬉しさを与えるのに評価しきれ
新 App Store 審査ガイドライン 翻訳&差分ガイド 2020年3月号
# はじめに
これは2020年3月4日付けで変更された App Store 審査ガイドラインの翻訳&差分ガイドです。
[前回](https://qiita.com/midnightSuyama/items/655d52f61132d11bf1c5)からの主な変更点は、プッシュ通知の広告利用や飽和カテゴリの更新などです。これまでプッシュ通知の広告利用は禁止されていましたが、条件付きで認める方針に変更されました。App Store で飽和しているカテゴリには、占いや出会い系が加わり、該当アプリの審査は厳しくなるようです。
`multi-player` から `multiplayer` への変更など、軽微な変更は修正項目から除外しています。
https://developer.apple.com/app-store/review/guidelines/
## 修正の撤回
1.4.4 と 5.1.5 について、改訂翌日に変更が無かったことにされているため、改訂当日に確認した方は注意が必要です。
急遽撤回されただけなのか、明示しない方針に変えたのか、真意は不明ですが、少なくとも文書上
[iOS]カスタムドキュメントにサムネイルを表示する
# iOSとファイルのサムネイル
iOSでは、Mac同様にファイルを扱う機構が存在します。
標準では「ファイル」アプリを通してiCloud Driveやローカルのファイルにアクセス出来ますし、それぞれのアプリでは`UIDocumentPickerViewController`を使ってアクセスすることも出来ます。![IMG_1408.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24979/38f5f863-fec8-6256-edfe-03f751bf3383.jpeg)
これらのファイルブラウザではjpegやpngなど標準的なファイルフォーマットのサムネイル表示が標準で実装されています。
また、サムネ
【Swift】iOS13でStoryBoardではなくXibから起動する
# なんでXib(Xcode Interface Builder)を使うの??
Xibとはアプリケーションの画面をレイアウトする時に使うやつです。
基本的な扱いはStoryBoardと似ています。【Xibのメリット】
作った画面を複数の画面で再利用するのが簡単
画面の1部のパーツを作ることができる【Xibのデメリット】
ファイル数が増えがち。。。
画面遷移の関係が可視化されない(コードで書くから)# 今回やってみること
アプリ起動時の初期画面をXibで作った画面に設定する(iOS13で実現)
iOS13からは、SceneDelegateがテンプレートとして標準化されているのでiOS12以前のやり方と少しだけ違うみたいです。# 実装の方法
では、早速作っていきます
### ViewControllerとXibファイルを作成する
とりあえず、プロジェクトを作ります。そしたら、画像のようにプロジェクトのフォルダを選択してください。
初めてswiftでユニットテストを書いてみたお久しぶりの投稿になってしまいました。
今までは
– [ストップウォッチ](https://qiita.com/sventouz/items/91faaa4ccdf02a5788bd)
– [タイマー](https://qiita.com/sventouz/items/e419ef5a9955ce06d043)
– [TODOアプリ](https://qiita.com/sventouz/items/ac29ed25f3ffc697a9d8)
– [電卓](https://qiita.com/sventouz/items/07c69235e6760cbdf5b1)
– [天気予報(API)](https://qiita.com/sventouz/items/07c7137e07a580a93cd7)
– QRコードジェネレーター(API)
– [ひらがな化(API)](https://qiita.com/sventouz/items/318d8370ab489724c454)と細々したものにチャレンジしてきたのですがここらで少しSNSのようなものを作成したいなと思い2月はIns
ViewControllerのviewIfLoaded?.windowが切り替わるタイミング
試したところ、`viewWillAppear/viewWillDisapper`系のライフサイクルイベントが呼ばれるタイミングと連携する模様。
つまり、presentする際には、`.fullscreen/.overfullscreen`で挙動が変わる。
Firebase iOS SDKをCarthageで管理する
# はじめに
**Firebase iOS SDK**を導入したのですが、**CocoaPods**管理の場合に**ビルド時間がかかる問題**がありました。
このため、**Carthage**で管理するように変更した内容についてまとめました。なお、基本的にはFirebase公式リポジトリにある[Carthage.md](https://github.com/firebase/firebase-ios-sdk/blob/master/Carthage.md)に記載されている手順通りに対応することで**Carthage**管理することができます。
以下では、上記手順に沿って対応する中でいくつかハマった点について詳しく説明していきます。## 今回導入した**Firebase iOS SDK**
* **FirebaseCrashlytics**
## 実行環境
|環境|バージョン|
|:-:|:-:|
|macOS Catalina|10.15.3|
|Xcode|11.3.1|
|Firebase iOS SDK|6.18.0|# Firebase iOS SDKをC
【Swift】UIPickerViewのデフォルト値を変更する
## 要約
UIPickerViewのデフォルト値を変更したい場合、以下の2箇所を変更する必要がある。
– PickerViewを開いた後、選択されている値を変更する
“` swift
self.pickerView.selectRow(index, inComponent: 0, animated: false)
“`– PickerViewで選択された値を表示しているTextFieldなどの値を変更する。
“` swift
pickerViewTextField.text = optionList[index]
“`## 備考
– `selectRow`だけ設定すけばいけるやろと思ってハマった…ので備忘録です。
UILabelやUITextFieldなどで箇条書きをきれいに表示する
# 概要
iOSのUILabelやUITextで箇条書きテキストを表示したい場合の実装例です。
単純に実装すると以下のBeforeのようにインデントや適切な行間がなく見辛くなってしまいますが、これをAfterのようにきれいに表示できます。
|Before|After|
|:-:|:-:|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113553/b56149de-0077-6ef1-a446-2371b211d6c1.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113553/1be25c2f-6702-a04c-3139-1ac93ed4a871.png)|# 実装方法
XcodeのPlaygroundで実行可能なコードサンプルです。
“`swift
import UIKit
import PlaygroundSupport
let text = “※以下に
XcodeのBuild PhasesでSwiftスクリプトを実行する
ビルド前にファイルの自動生成が必要な時はコンパイル前に行っておく必要があります。
人の温かみを感じるために毎度エンジニアが自動生成するスクリプトを実行しても良いのですが、XcodeのBuild Phasesの中に組み込めばビルド時に自動的に行ってくれます。
Build PhasesではBashスクリプトを実行できます。なので基本Bashスクリプトで自動生成するプログラムを書くのですが、BashからSwiftコマンドを実行すればSwiftで書かれたプログラムを実行できます。Swiftはコマンドラインの実行も対応しているので、PythonやRubyのスクリプト言語がわからないiOSエンジニアでもメンテナンスができるというメリットがあります。
# 環境
Xcode11.3.1# スクリプトファイルの作成
空のSwiftファイルを生成します。そして1行目に以下のおまじないを挿入してください。“`Script.swift
#!/usr/bin/swift
“``#!/usr/bin/swift` はかならず1行目に書きます。コメントの下ではうまく動きません。
これはSwi
‘Showing Recent Issues SWIFT_VERSION ‘3.0’ is unsupported, supported versions are: 4.0, 4.2, 5.0.’について
久しぶり以前作成したSwiftのソースコードを開いたら、下記のエラーが発生しましたので、
対処方法を明記いたします。
※情報の判断はご自身の責任でお願い致します。`Showing Recent Issues SWIFT_VERSION ‘3.0’ is unsupported, supported versions are: 4.0, 4.2, 5.0.`
環境:
Xcode11.3原因:
原因といたしましては、Swiftのバージョンの違いによるものです。対応方法:
使用しているSwiftのコードを最新にする必要があります。project File → Build Phases → Swift Language Version
内のversionを任意のものにする必要があります。
![capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96378/f352f5e5-dc89-fb03-801f-574865106d25.png)**※注意点としましては、Target
Xamarinを勉強し始めたので覚えたことを記録するメモ
#はじめに
Xamarinを使ってマルチプラットフォーム開発をやってみたくなったので、勉強したことを記録として残す(徐々に追記)## Xamarinとは
iOS | Android | Windows など複数のプラットフォームで動作するアプリをC#を使って構築することができるライブラリ– Xamarin.iOS
– Xamarin.Androidを導入すると、iOSとAndroidのマルチプラットフォーム開発ができる。
例えばVisual Studioに導入すれば、ついでにUWPアプリも作れる。## Basic Class Library
各プラットフォーム間で共通的に使えるライブラリ。
基本的には、このライブラリを使ってアプリを構築し
個別の対応が必要なものについて、個々のプラットフォームの
ライブラリを使うことで共通化を目指すようだ。## iOS版のアプリについて
やはりiOS版のアプリについてはMacとXcodeが必要であった。
Mac上のiOSシミュレータは`Xamarin.iOS Build Host`によりペアリングすることで
Windows上のVis
[iOS13] SceneDelegateでDynamicLinksからのURLをハンドリングする
# 環境
– Xcode 11.3
– Swift 5.1.3
– Firebase 6.16.0
– FirebaseDynamicLinks 4.0.7# 経緯
「DynamicLinksからアプリを起動した際に、iOS13系でURLをハンドリングできていない」
という問題に最近対応しました。結局、マルチウィンドウを活用していないことから、SceneDelegateを破棄することで対応しましたが、調べたもの達が可哀想なので供養するために記事にしました。
ちなみにSceneDelegateの破棄対応は3つで完結します。
– `SceneDelegate.swift` を削除
– `info.plist` から `Application Scene Manifest` のkeyを削除
– プロジェクト作成時に`AppDelegate` に自動で組み込まれる `func application(_:configurationForConnecting:options:)` と `func application(_:didDiscardSceneSessions:)` を削除
Xcode 11.4でFlutterの実機デバッグでエラーになった際の対応方法
# はじめに
Xcode 11.4でFlutterの実機デバッグを実行した際に以下のエラーが発生したため、対応方法についてまとめました。
“`terminal
error: Building for iOS, but the linked and embedded framework ‘App.framework’ was built for iOS Simulator. (in target ‘Runner’ from project ‘Runner’)
“`## 実行環境
|環境|バージョン|
|:-:|:-:|
|macOS Catalina|10.15.4 Beta(19E250c)|
|Andriod Studio|3.6.1|
|Xcode|11.4 beta (11N111s)|## 対処方法
Flutterの公式サイトに以下の記載[^1]がありました。
> To develop Flutter apps for iOS, you need a Mac with Xcode installed. Xcode 11.4 changed the way
ニコニコ動画の動画のタグをApple Musicで検索するショートカット
本記事では、ニコニコ動画にある動画に使用されている原曲を、タグから取り出して、Apple MusicまたはYouTubeで検索するiOSショートカットを紹介します。
~~大してショートカットできてない~~
iOSショートカットのリンク → [ニコニコ動画の動画に含まれる音楽をApple Musicで再生](https://www.icloud.com/shortcuts/add9bd2ddfed4f6f831c8b4913817e91)
# 特長
– niconico コンテンツ検索APIを利用
– ニコニコ動画のタグ機能を利用
– Apple Music APIを利用せず、iTunes Search APIを利用
– Apple Developer Programのメンバーシップが不要
– 共有シートから利用
– ウェブブラウザやアプリケーションで利用可能# 使い方
1. ウェブブラウザまたはアプリケーションの共有シートから「ニコニコ動画の動画に含まれる音楽をApple Musicで再生」を選択
2. 動画のタグ一覧から検索したい音楽の曲名を選択
3
iOSでBluetoothの許可設定
単なるメモです。
なにか作ったら、そのうちアップします。多分##やってたこと
M5StackとiPhoneで通信するiOSアプリとM5Stack側のソフト[数少ないM5StackとiOSの記事](https://qiita.com/From_F/items/66099d488a324ad38d40)を参考にしながら、iOSアプリを作っていたわけですが、どうしてもBluetoothで通信できない。。。。
##何をやって解決したか?
結論から言うと、Bluetoothを使うときの許可設定をやっていなかった。だけ
よく見る、Bluetooth使うけどOK? はい いいえ 見たいやつ。###Appの実装
「plist」を右クリック→「Open Ad」 → 「source code」
wrap with new widget が消えた (Flutter / IDE)Android Studioで電球マークを押しても、Wrap with new widgetが出てこなくなり、Adjust code style settingsしか出てこなくなった時の解決方法
どこにあるかわからず、結構うざかったので、解決した時のURLを貼っておきます。
解決方法
(Mac)Preference → Editor → intentions → Quick assist powered by the Dart Analysis Server..を有効化https://github.com/flutter/flutter-intellij/issues/2448
![スクリーンショット 2020-03-07 11.36.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378998/21be4830-a5b7-cea5-67fe-9088273450cc.png)
gPRC の Server streaming と AVSpeechSynthesizer を使って iPhone に Slack の投稿を読み上げてもらう
## はじめに
gRPC の Stream API を触ってみたかったので、 Slack の投稿を Server streaming で配信する Go サーバーと、それを受信する iOS アプリを実装しました。
実装する中で得た知識をまとめます。
ちなみに、受け取った文字を表示するだけでなく、 AVSpeechSynthesizer を使って読み上げるようにしてみたところ、Slack のやり取りを目ではなく耳で追うことができ、新鮮な感覚を味わうことができました。
日々 Slack の流れを追うのに疲れている人は試してみてください。
## gPRC サーバー(Go)
### 事前準備(grpc-go)
https://grpc.io/docs/quickstart/go/
に従って gPRC を利用する準備をします。
### proto ファイルの用意
プロジェクトのルートに `proto` ディレクトリを作成し proto ファイルを配置します。
“`
.
├── proto
│ ├── comment.proto
“`Server streaming
画像分類モデルをつくってモバイルで動かしてみた
#はじめに
自作の画像データセットから分類モデルをつくり、iOSやAndroidのカメラを用いてリアルタイムで動かす方法を共有します。
##環境
– google colaboratory(ランタイム:GPU)(TensorFlow 1.15)(Google Chrome)
– Android Studio
– android 8.0(NEXUS6P)
– Xcode
– iOS 13(iPhone8)#1. 自作データセットの作成とモデルの作成
この記事では[retrain.py](https://github.com/tensorflow/hub/blob/master/examples/image_retraining/retrain.py)を用いて画像分類モデルを作成します[^1]。
[^1]: retrain.pyは[make_image_clas