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

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

【Flutter】build() でやってはいけない 3 つのこと

[Flutter で仕事したい人のための Widget 入門](https://qiita.com/chooyan_eng/items/6f15868cedcc85827eeb) で説明した通り、Flutter では基本的に `StatelessWidget` や `StatefulWidget` を継承したクラスで `build()` をオーバーライドし、そこに UI を構築する処理を書いていきます。 (厳密には、 StatefulWidget の場合は `State` クラスの `build()`)

例↓

“`dart:login_page.dart
class LoginPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(32),
child: Column(
mainAxisSize: MainAxisSize.max,

元記事を表示

[Swift] スタティックプロパティ(static)を使ってみて分かったこと

#はじめに
今回は、スタティックプロパティを理解するためにインスタンスプロパティも一緒に動かしてみたので、
比較しながら理解を深めていけたらなと思います。
#試してみたコードの説明
比較のためにインスタンスプロパティaとスタティックプロパティbを用意します。
関数getは、aとbの値の変更内容を表示するためのものです。

“`swift
struct Sample {
var a = 0
static var b = 0

func get() -> String {
return “aが\(a)、bが\(Sample.b)”
}
}
“`

###インスタンスプロパティaを変更してみた

“`swift
//3種類のインスタンスを作成します。
var S1 = Sample()
var S2 = Sample()
var S3 = Sample()

//もちろん結果は同じです。
S1.get() //”aが0、bが0″
S2.get() //”aが0、bが0″
S3.get() //”aが0、bが0″

//S2

元記事を表示

コピペで乗り切るエンジニアがSwiftUIを勉強してみた(環境構築編)

こんにちは!

転職をして会社で扱うPCがMacだったので、
社畜の私はMacBook Proを買いました。

この時期、M1搭載のMacがYoutubeで色々話題ですが、
何か分からないけど使えないソフトとかあったらどうしよう。。。と
Intel CoreのMacを買いました。

さて、せっかくMacを買ったということで、
MacでできてWindowsでできないことといえば、
#### そう! iOSアプリの開発!

何も分かりませんが、やってみないと分からないということで、
まずは環境構築をやってみます。

## 環境構築
Swift UIを使えるように実装していきます。

### Xcodeのインストール
「App Store」より「Xcode」をインストールしていきます。
![スクリーンショット 2021-01-07 19.36.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1009893/6621e955-46d7-7c7a-47b9-976eb911b66b.png)
![スクリ

元記事を表示

iOS Simulator 実物大にする方法

#はじめに
シミュレータのサイズを実物大にする方法を調べてみても、
情報が古くて指定するメニューがなかったりしたので、
お助けになればと思います。
#手順
上部メニューのWindow > Physical Sizeにチェックを入れるだけです。
![スクリーンショット 2021-01-07 16.19.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/980010/d0ef4b52-565f-ae4a-9d7c-cee887827ca8.png)

元記事を表示

iOS14.3のiOSシミュレータでNavigationBarが黄色くなってしまう場合の対処方法

# 問題点

iOS14.3のiOSシミュレータでiOSアプリをビルドして起動すると、NavigationBarなどの表示が本来は半透明のところが黄色くなってしまいます。
全体の雰囲気がわからなくなるので元にもどしたい。

## スクリーンショット
iOSSimulator

# 対処法

1. iOSシミュレータのメニューからGPUの設定を変更する
– 変更前 [File] -> [GPU Selection] -> [Automatic]
– 変更後 [File] -> [GPU Selection] -> [**Prefer Integrated GPU**]
2. iOSシミュレータを再起動する

![スクリーンショット 2021-01-07 14.35.20.png](https://qiita-i

元記事を表示

[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”__ とい

元記事を表示

OTHERカテゴリの最新記事