iOS関連のことを調べてみた2021年01月07日

iOS関連のことを調べてみた2021年01月07日
目次

[Swift5]コードでダークモード(暗い外観)の適用を回避する方法

## 実装方法
“`swift
//ダークモードの適用を回避
self.overrideUserInterfaceStyle = .light
“`
これで常にライトモード(明るい外観)になります。

## まとめ
この方法で簡単にダークモードの適用を回避することができます。

しかし、AppleはiOSアプリのダークモード適用を推奨しているので、どこかのタイミングでアプリにダークモード設定を適用させる必要があります。

この方法は、一時的な対応として処理しましょう!

元記事を表示

iOS14でtrackingAuthorizationStatusのメモ

## 環境

– Xcode12.3
– iOS 14.2 iPhone SE

### 条件

1. 端末: 設定>プライバシー>トラッキング>Appからのトラッキング要求を許可
![IMG_9760666317E9-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228438/c13c40fa-d467-b982-842d-2794bf5718aa.jpeg)
2. アプリ: トラッキング要求ダイアログ
![IMG_2264.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228438/66170766-c216-0dec-b4ea-0c08ad3afd61.png)

## トラッキング要求の動き

|端末|トラッキング要求|アプリ|status|
|:-:|:-:|:-:|:-:|
|許可|未|-|notDetermined|
||済|許可|authorized|
|||拒否|denied|
|拒否|未|-|d

元記事を表示

[Swift] プロパティオブザーバ willSetとdidSet

#プロパティオブザーバとは
格納型プロパティの値が更新される時、それをきっかけにして処理を書く事が出来ます。
例えば、プロパティオブザーバを使用する事で
var price = 100 の値を更新した時に、更新の回数をカウントする処理を書く事が出来たりする訳です。
このプロパティオブザーバには、値が変更される直前に呼び出される`willSet`と変更後に呼び出される`didSet`があります。
これらはどちらか一方だけ書くこともできます。
書き方は以下の通りです。

“`swift
var プロパティ名: 型 = 初期値 {
willSet (仮引数) {
変更直前に呼ばれる処理
}
didSet (仮引数) {
変更直後に呼ばれる処理
}
}
“`

#それぞれの仮引数
`willSet`と`didSet`にはそれぞれ仮引数を指定する事が出来ます。
`willSet`では、プロパティに格納される直前の新しい値を仮引数で参照する事が出来ます。
仮引数を省略する場合は、`newValue`という名前で参照できます。
`d

元記事を表示

iOSのショートカットアプリでsshスクリプト実行:Rasberery PiやLinux操作が捗る!

## はじめに

皆さんはiOSのショートカットAppはお使いでしょうか?私は最近まで全く使っていませんでした…。
ただ最近Rasberry Piとの組み合わせ(※他の機器でも使えますが)に無限の可能性を感じるようになり、この感動を共有したいと思って筆を取りました!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621288/6d734483-9989-9de3-c5b3-d230d7688b53.png)

本記事では主に下記内容を取扱います。

– SSH接続設定方法(iOS13から対応の公開鍵認証)
– 任意のスクリプトを実行
– 簡単な例
– 連続実行するプログラムをバックグラウンドで実行する
– バックグラウンドで実行しているプログラムを終了する
– リモートマシンをシャットダウン/再起動する

なお私は最近このあたりに手を出し始めたため、もし間違っている内容などあればコメントを頂けると幸いです。

## SSH接続設定方法(iOS13から対応の公開鍵認証)

元記事を表示

EC2 on MacでiOSビルド環境の夢を見た

※個人の感想です
※2021-01-06時点での情報と調査結果をもとに書いているので今後変わる可能性たかし君です

## やろうと思ったこと
2020年12月頭くらいに発表された、EC2でmacが起動できるって話で、
ついにiosビルド環境をクラウドで完結できる日が来たかと思いいわゆるCI/CD環境を構築しようかと思った。

=> 断念

## 苦しい
mac1.metalインスタンスは専有ホストでしか利用できない。これが運用面・料金にダイレクトに響く。

### 起動が結構長い
us-west2でやりましたが、30分近くかかった。

### 1度起動すると24H解放されない
物理マシンを借りてるみたいなもんらしいから致し方なしとは思いますが…

### 専有ホストはインスタンスが起動しているかによらず課金される(多分)
これもし認識違ったらそっと教えて欲しい…けど
専有ホスト作成しようとしたときのコンソールの
`インスタンスごとではなく、割り当てられた専有ホストごとに請求`
って文言や、そもそも物理マシンを借りるって性質である以上、使ってない時間は課金されないなんて虫の良い話があると

元記事を表示

Building for iOS Simulator, but the linked and embedded framework ‘XXX.framework’ was built for iOS + iOS Simulator. に対応した

Xcodeを12.3にした所、
「Building for iOS Simulator, but the linked and embedded framework ‘XXX.framework’ was built for iOS + iOS Simulator.」
が発生する様になってしまったので対応したメモ

#ググってやった事
・Build Settings – Architectures – Excluded Architectures – Debugに
Any iOS Simulator SDKを追加し、
[arm64 arm64e armv7]を設定

・Build Settings – Build Options – Validate Workspace – Debugの設定をNoからYESに変更

この変更でエラーから警告に変わって取り合えずデバッグ出来る様にはなった。

参照先 https://stackoverflow.com/questions/65303304/xcode-12-3-building-for-ios-simulator-but-the-link

元記事を表示

[RxSwift]combineLatestについて

Rxの学習過程で学んだことを後からでも見れるようにメモしていきます
本記事はこちら[RxSwift](https://github.com/ReactiveX/RxSwift/tree/main/RxExample/RxExample/Examples)を参考にしています

# CombineLatestとは
`Observable`シーケンスのいずれかが要素を生成するたびに、指定された`Observable`シーケンスを、1つのタプルの`Observable`シーケンスにマージする。

# 使用例
各`TextField`に入力した値をリアルタイムで合計し、ラベルに表示する。
といった機能を作っていきます。

数値入力用の`TextField`を3つと合計結果表示用の`Label`をひとつ用意しいます。

“`swift

Observable.combineLatest(textField1.rx.text.orEmpty, textField2.rx.text.orEmpty, textField3.rx.text.orEmpty) { textValue1, textVal

元記事を表示

iOSのコード署名がなんのためにどうやって行われているかを理解する

## 背景

最近iOS開発に入門したんですが、いろいろなことがわからない中でもとくにコード署名がわからない。Provisioning Profileとか`.p12`とか名前は聞いたことがあるけど結局何をしているのか不明な概念がいきなり登場してきて、アプリを動かすまでのコード署名の手続きは実行できてもそれぞれの手続きがなんのために行われているかわかりませんでした。

– そもそもコード署名はなんのために、どうやって行われているのか
– いろいろなファイルが登場してくるけどそれぞれの役割はなんなのか

を理解したくて調べたのでまとめます。

この記事にはこう思えば自分は理解しやすいなと思った内容を書いたので、有識者から見ると単純化しすぎていたりそもそも間違っているものが含まれているかもしれません。その場合はコメントで教えていただけると助かります。

## 参考リンク

– [Code Signing Guide](https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSignin

元記事を表示

[Swift] 遷移先で変更した配列を遷移元に反映させ、Label等に表示させる方法

#はじめに
今回はNavigationControllerを用いて、画面遷移を行っています。そのため、遷移先から遷移元に戻る時に呼ばれるnavigationControllerのwillShowを使っています。また、collectionViewのCell内にLabelを置き、そこに配列(String)の値を表示させています。
#開発環境
“`
macOS 11.0.1
Xcode version 12.2
Swift version 5.3.1
“`
#コード
親画面にはString型で変数aを与え、初期値として5個の何の値も入っていない値を与えておきます。これを、collectionViewを用いて、Cell内に設置したLabelに先程の値を与えています。遷移先で変更された配列を遷移元に渡した時にプロパティ・オブザーバを設定してあげることで変更が起こった時の処理を書くことができるようになります。オブザーバは、プロパティ変更前に呼ばれる willSet と、変更後に呼ばれる didSet があります。今回は、変更後に呼ばれる**didset**を使います。

“`swift:Fi

元記事を表示

【iOS/Android】ネイティブアプリをAPIと繋ぎ込む時に便利なツール

# iOS/AndroidでAPIをつなぐ時に便利なツールを紹介します!

## [Chrome拡張のTalend API TesterでAPIテスト – Qiita](https://qiita.com/ktr1211/items/c16cb4f99f91b998af46)
APIが正常に動いているか、これでチェックします!
この記事わかりやすくて神ですよ!

## [Text Escaping and Unescaping in JavaScript](http://0xcc.net/jsescape/)
JSONに入っているUniCode、読みたいですよね?
そんな時はこれに打ち込めば!日本語に変換してくれて便利!!!

## [JSON Schema Tool](https://jsonschema.net/login#/)
あとは最後に、これ
JSONを入れるだけでスキーマを作ってくれます!楽チンですね

# まとめ
この記事で少しでも開発が捗ったら嬉しいです!

元記事を表示

InheritedWidgetの目的と使い方【Flutter】

# まえがき

`InheritedWidget`の使い方の基本をまとめます!

Flutterを勉強していてよくわからなくなるポイントの一つがこの`InheritedWidget`だと思います。

筆者自身、これを理解するのにかなり時間がかかったので、「こういう説明があったらよかったな」と思う説明を書きます。

なお、以下では、`InheritedWidget`クラスを継承したクラスのことを単に`InheritedWidget`と呼びますね。他の`StatefulWidget`なども同様です。

## 前提知識

FlutterアプリがWidgetのツリー構造でできていることを知っていて、`StatefulWidget`と`setState`は使えるものとします。

`BuildContext`の知識も少しだけ要りますが、「Widgetツリー内での位置を表現するもの」程度の理解で十分です。

それについてはこちらをお読みください。

[Flutterのcontextの「お気持ち」を理解する](https://qiita.com/agajo/items/93d75aafe87bd

元記事を表示

Alamofireでインターネット接続状態を確認する

## はじめに
AlamofireでAPIリクエストをする際に端末がインターネット接続されていなかった場合エラーを流す必要がありました。
その時に調べたことのまとめになります。

## NetworkReachabilityManagerを使う
Alamofireには標準で“`NetworkReachabilityManager“`というクラスがあります。
今回はそちらを使用して接続状態を確認します。
[参照](https://github.com/Alamofire/Alamofire/blob/master/Source/NetworkReachabilityManager.swift)

## 使い方
その①
ベタがき
コード量が少ないがパッと見読みにくい

“`swift
import Alamofire
if let isConnected = NetworkReachabilityManager()?.isReachable, !isConnected {
print(“Disconnect”)
}
“`

その②
クラスを定義する
見やすい

“`s

元記事を表示

INRestaurantReservation: ユーザーの予約情報をSiriに共有して、イベントを自動的に提案する

あなたがレストラン予約アプリケーション、またはユーザーのために予約を入れるアプリケーション(フライト、列車、チケット)を開発している場合、予約の詳細についてSiriに通知することができます。

この記事では、予約アプリのデモを作成します。ユーザーが予約を行うと、アプリが予約情報をSiriに送信し、Siriは予約情報をカレンダーに追加するようユーザーに促します。予約が閲覧されると、アプリが予約時間を更新します。システムカレンダーアプリが予約情報の更新について、ユーザーに通知するのが確認できます。

## 利点

Siriに通知することで、ユーザーはイベントをカレンダーに追加するための通知を即座に受け取ります。

イベント会場の詳細情報もSiriによって自動的に入力されます。

[Swift5]特定の時間を比較して前なのか後なのかを判定する方法

## 特定の時間の比較
例えばアプリを起動したときに、現在時刻と開発者側で予め設定している時刻を比較して、その状況にあった処理をおこないたい場合があったとします。(何時より前なら処理A, 後ならBなど)

そういった状況で使えるのが`.compare( )メソッド`です。
今回はこちらのメソッドの紹介をします!

## 記述方法
“`swift
if ‘現在時刻’.compare(‘こちらで設定した時刻’) == .orderedDescending {
//ここで処理
//.orderedDescendingは〜より後
}

if ‘現在時刻’.compare(‘こちらで設定した時刻’) == .orderedAscending {
//ここで処理
//.orderedAscendingは〜より前
}
“`
このように記述すればOK!
ふたつの時刻を`.compare( )メソッド`で比較して、以降なのか以前なのかを判定しております。
また、双方の時刻が同じかどうかを判定したい場合は`.orderedSame`を使えばいい。

参考にしてください!

元記事を表示

Flutter で仕事したい人のための Widget 入門

# この記事について

Flutter の入門記事の中には、初学者にもわかりやすく説明しようとするあまり実際のアプリ開発で重要になる内容まで抜け落ちてしまったり、意訳や曲解によって誤解を与えてしまう内容が含まれることもあったりします。

この記事は、Flutter で本格的にアプリ開発を進める上で僕が先に知りたかったこと、詳しい説明がほしかった部分を、過去の自分と同じような Flutter 初学者向けに説明する記事です。

本来は公式ドキュメントを読みながら学習を進められるのが理想ではありますが、Flutter のドキュメントは全て英語であること、またある程度のアプリ開発経験があることを想定した難易度になっている(ように感じる)ことから、まずは日本語の記事を頼りに学習を進める方も多いと思います。この記事は、そんな方の役に立つ内容を目指しています。

この記事では、中でも Flutter の Widget に焦点を当てて書いています。

# 本文

## Everything is a Widget

Flutter には __”Everything is a Widget”__ とい

元記事を表示

パスワードを入力する時に使用するTextFieldについて

# 問題

アカウント作成画面を作成していた時に、パスワード入力のViewにTextFieldを使用していたのだが、よく見るパスワード入力は入力文字が見えないようになっている。
SwiftUIを使用している場合、このようなTextFieldはどうやって実装するか分からなかったので調べた。

# 解決方法

TextFieldにオプションをつけるのかと思っていたが違うらしい。
SecureFieldというViewを使用すれば良いみたい。

https://developer.apple.com/documentation/swiftui/securefield

![スクリーンショット 2021-01-05 0.35.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567975/86cdcffb-44e0-ff23-c2b3-df0b43f915a7.png)

元記事を表示

非同期処理中にユーザー操作を無効にする方法

# 問題

アカウント作成という非同期処理があるのだが、作成中にはユーザーの操作を無効化したい。
ただ、調べてもユーザー操作を無効にする方法はないっぽい。
そこで、ZStackを使用して、上にViewを重ねることで解決できないか検討した。

# 解決方法

以下のコードのように、isBusyがtrueの時にのみ、Color.whiteを重ねてみたところ、下のViewを操作できないことを確認できたので、これで良さそう。
もし、より良い方法があればコメント頂けると助かります・・・。

“`swift
ZStack{
VStack{
TextField(“ユーザー名”, text: $vm.userName)
.autocapitalization(.none)
.textFieldStyle(RoundedBorderTextFieldStyle())
TextField(“メールアドレス”, text: $vm.emailAddress)
.autocapitalization(.none)
.textFieldStyle(RoundedBorderT

元記事を表示

TextFieldにてアルファベット入力時に先頭文字が大文字になってしまうことを防ぐ

# 問題

TextFieldを用いた画面を作成した際に入力時に先頭文字が自動的に大文字になってしまうことがある。
特に、Canvasを使用して画面の動作を確認する際に、キーボードからの入力だと、大文字を小文字に変換する術がなく、辛い。
![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567975/29425af9-16d3-0649-5706-3a4cc20e302e.gif)

# 解決方法

TextFieldのModifiersである、autocapitalization(_:)を使用して、大文字への自動変換を制御すれば良い。

https://developer.apple.com/documentation/swiftui/textfield/autocapitalization(_:)

“` swift
TextField(“ユーザー名”, text: $vm.userName)
.autocapitalization(.none)
T

元記事を表示

New Relic Mobile for iOSをインストールしてみる

## 背景
New Relic Mobileを使ったことがなくて、無料枠の仕様が変更されていたので、New Relic agentのインストールをまとめてみました。

New Relic の新しい製品体系と価格体系

### New Relicとは
New Relic社が提供しているSaaS型のFSOなパフォーマンス監視プラットフォームになります。今回試すMobile意外にもAPM、Infrastructure、Browser等の様々なサービスに対してパフォーマンスを監視できるようになります。
https://newrelic.com/jp
## 環境
Xcode: 11.5
Swift: 5.2.4
cocoapod: 1.9.3
New Relic SDK: 5.14.2

## New Relic Mobile インストール手順
以下、New Relic公式ドキュメントの手順に従って、cocoapodを用いたインストールを行う。
https://docs.newrelic.co.jp/docs

元記事を表示

SwiftでHTML/XMLジェネレータを作成する(dynamicMemberLookup)

# 概要

`@dynamicMemberLookup` を使ってSwiftでHTML/XMLを生成するDSLを作ります。(作りました)

#SwiftPM

SwiftPMの形で配布しています。

https://github.com/coe/MarkUpDynamic

#コード例

## HTML

以下のような形でSwiftを記述します。

“`swift
MarkUp()
.html[MarkUp()
.body[MarkUp()
.table[MarkUp()
.tr[MarkUp()
.td[character: “one”]
.td[character: “two”]
]
]
]

元記事を表示

OTHERカテゴリの最新記事