iOS関連のことを調べてみた2022年10月18日

iOS関連のことを調べてみた2022年10月18日

dSYM Uploadが失敗する | dSYMが不足している

# Problem(s)
– 最新のXcodeではビットコードが非推奨になりビットコードをアップロードしなくなったアプリはApp StoreからdSYMファイルをダウンロードできなくなりました。CIでfastlaneの`download_dsyms`を使っている場合や手動でdSYMがダウンロードできなくなるとFirebase Consoleで「dSYMが不足している」とエラーが出てクラッシュログが見にくくなります。
– Firebase SDKに内包されているスクリプト`run`を使ってdSYMを直接Firebase Consoleにアップロードする方法がありますがこの方法には現時点でバグがありdSYMを探し出せない場合があります。

実際に多くのプロジェクトでdSYMの運用が一時的にXcodeから手動アップロードになっているのではないでしょうか?

# Solution

以下のURLが参考になります。

https://minidev.dev/blog/2022/09/30/upload-dsym-to-firebase-crashlytics-with-xcode-14/

元記事を表示

【Swift】Alamofireでカスタムレスポンスを作成する

# はじめに
AlamofireでAPIを叩いて`responseDecodable(of: StatusesShow.self)`でデコードされた結果を受け取る。
今までこの方法で使っていました。
この時返ってくる値は`Result`です。

例えばTwitterのAPIを叩いたとしましょう。
[TwitterError](https://qiita.com/SNQ-2001/items/604559ee38227cc134a3)を使いたいと思うとこのように美しくない実装になります。
“`swift
AF.request(url, method: .get, headers: headers).responseDecodable(of: StatusesShow.self) { response in
switch response.result {
case .success(let data):
print(data)
case .failure(_):
guard let d

元記事を表示

SwiftUIの赤は赤じゃない件

# はじめに
“`Swift
import SwiftUI
Color(.red) //…(1)
Color.red //…(2)
“`
(1)と(2)の違い、分かりますか?

## 答え
表示してみるとこうなります。
![red1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95033/c7cb3321-df91-be5d-e169-55eac3ae9bfb.png)
アプリを動かしてみたら、なんだか色が違う気がする…:thinking:
そんな時に思い出していただければ幸いです。:blush:

# 解説
“`Swift
Color(UIColor.red) //…(1)
Color.red //…(2) == UIcolor.systemRed
“`
書き下すとこうなります。
(1)は“`UIColor“`の“`red“`(Fixed colors)をColorに変換したものです。
(2)は“`red“`という名前ですが、“`UIColor`

元記事を表示

iOSでOSの文字サイズ設定を変更しても、ブラウザで文字の大きさが変わらない

iOSでは、設定の「画面表示とテキストサイズ」にある文字サイズ設定を変更したとき、iOSアプリで表示されている文字サイズを変更することができます。
しかしブラウザで表示しているwebサイトの文字サイズは(多くの場合)変わりません。

iOSのアプリケーション開発の文脈では、この文字サイズ可変について「Dynamic Type」と呼んでおり、予め用意されているtext styleを選択することで有効になります。
https://developer.apple.com/documentation/uikit/uifont/scaling_fonts_automatically

iOSのブラウザ上で、このDynamic Typeを有効にするためには`font:-apple-system-body;` の指定が必要になります。

### font:-apple-system-bodyで何が起きるか
* 文字サイズが、OSの設定値で上書きされる
* iOSでOSの設定がデフォルトの場合、16px > 17px
* 字体が-apple-systemと同様に変更される
* 英数

元記事を表示

SwiftUI のモディファイアの順序による結果の相違

# はじめに
SwiftUI は、ビューに対してモディファイアをメソッドチェーン形式で追加していくという統一的な操作ができるので、とてもわかりやすいですよね。
時にはモディファイアが多すぎて、見通しが悪くなることはありますが…。

簡単に扱えるモディファイアですが、順序には注意する必要があります。

# 検証環境
– macOS Monterey 12.6
– Xcode 14.0.0

# 実験
“Text“ に、“frame()“, “padding()“, “border()“ の 3 つのモディファイアを設定してみます。
設定順序の組み合わせは 3! 通りあります。

## サンプルコード
それぞれ、枠線を付けた同じサイズの “VStack“ 内に上記 3 つのモディファイアの順序を変えた “Text“ を配置しています。

“`swift
import SwiftUI

struct ContentView: View {
var body: some View {
VStack {
Text(“モディ

元記事を表示

【Swift】プロトコルを拡張して実装を任意化する

# 通常
“`swift
import UIKit

class ViewController: UIViewController, SampleDelegate {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
}
func sample() {
print(“サンプル”)
}
}

protocol SampleDelegate {
func sample()
}
“`
`sample()`を実装しないと下の画像のようにXcodeに怒られます
![スクリーンショット 2022-10-16 18.28.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/31381ebc-6278-3057-e43b-c52970ab2757.png)

# デフォルト実装
“`swift
import

元記事を表示

[Flutter] MacOSで_ClientSocketException: Connection faild が出たときの対応

## 経緯
Flutterアプリを作る際に、
[サンプル](https://docs.flutter.dev/cookbook/networking/fetch-data “Fetch data from the internet”)を参考にしながら
APIからJSONの値を取得して、その値をそのまま表示するサンプルを作るときに躓きました。

## 内容
`package:http/http.dart` を使って get をすると以下のようなエラーが出ました。

“`
_ClientSocketException (Connection failed)
“`

Exceptionの内容は以下の通り。(xxx.comは仮)

“`
Exception has occurred.
SocketException (SocketException: Connection failed (OS Error: Operation not permitted, errno = 1), address = xxxx.com, port = 443)
“`

## 対応
Flutterの[Ma

元記事を表示

【Swift】MintでLicensePlistを使う

# はじめに
以前、[CocoaPodsを使用してLicensePlistを導入する記事](https://qiita.com/SNQ-2001/items/dc6433f63799ef76dd04)を書きました。
しかし、個人的にxcworkspaceが作られるのが好きではないでの最近はmintを使用してLicensePlistを導入しています。
今回はmintを使ってLicensePlistを導入する方法を記事に記録しておきます。

# 今回使用するサンプルプロジェクト
![スクリーンショット 2022-10-15 21.16.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d21acd7c-c01c-0855-8b5b-6194273734e7.png)

# やりかた
### Mintfile
“`:ターミナル
cd プロジェクトフォルダ
“`
Mintfileを作成します
“`:ターミナル
touch Mintfile
“`
Mintfileを開きます
“`:ター

元記事を表示

【Swift】公式ドキュメントのSequenceプロトコルを読む

# この記事は何?
SwiftのSequenceプロトコルについて、解説したものです。
[開発者ドキュメント](https://developer.apple.com/documentation/swift/sequence)より

# 宣言

“`swift
protocol Sequence
“`

# 概要

シーケンスは、1つずつ連続して取得できるリスト形式の値です。
シーケンスの要素を反復処理する代表的な方法は、`for-in`ループです。

“`swift
let oneTwoThree = 1…3
for number in oneTwoThree {
print(number)
}
// Prints “1”
// Prints “2”
// Prints “3”
“`

これによって、どんなシーケンスに対しても、多くの操作方法を実行できるようになります。
例えば、シーケンスに特定の値が含まれているかどうかを確認するために、「値が一致するか、シーケンスの最後に到達する」まで、各値を順次チェックできます。
次の例では、昆虫の配列に「蚊

元記事を表示

iOS・Android兼用Appアイコンを作成する (Flutter)

# はじめに
“`Flutter“`でiOS / Android両対応アプリを作成した時に、“`AppIcon“`の作成に一番時間を取られたので作業ノウハウをまとめました。

## どこに時間を取られたのか?
**iOS**
1024 x 1024 px[^1]の画像を用意すれば良いです。

**Android**
“`Android 8“`から導入された“`Adaptive Icon“`[^2]によって、画像中央の直径“`66 dp“`の“`セーフゾーン“`を残して周囲が切り取られる場合があるので、予め構図を考えておかないと意図しないアイコン表示になってしまいます。


:weary:
Swiftポケットリファレンスのメモ

### Swiftポケットリファレンスを読んだ後のメモ
[本のリンク](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88-Swift%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-POCKET-REFERENCE/dp/4774196177/ref=asc_df_4774196177/?tag=jpgo-22&linkCode=df0&hvadid=295704876452&hvpos=&hvnetw=g&hvrand=11315013947549265090&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009225&hvtargid=pla-526262305170&psc=1&th=1&psc=1)
### iOSのレイア構造

| 名前 | 概要|フレームワーク|
| :—: | :—:

元記事を表示

Lambda (Node.js) から SNS 経由で IOSデバイス にプッシュ通知

# はじめに
LambdaからSNS経由でアプリをインストールしたIOSデバイスにプッシュ通知する方法についてまとめました。

# 事前構築
– プッシュ通知用証明書(p12)は、発行済とする
– IOSデバイスのデバイストークンは、取得済みとする
– 参考記事
– https://kahoo.blog/howto-aws-sns-ios-push-notification/

# SNS作成
SNSでプッシュ通知の設定をします。
## プラットフォームアプリケーションの作成
`プラットフォームアプリケーションの作成`をクリックします。
![スクリーンショット 2022-10-14 16.00.24.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

構造体(Struct)について死ぬほど簡単にまとめてみた #1

## はじめに
長いソースコードを長時間眺めていると(お決まりの)ゲシュタルト崩壊を起こし、構造体やそのスコープ内でやっている処理など訳分からんくなるときが多々ある。そんなとき、構造体の基礎中の基礎をしっかり思い出し、冷静に対応することの大切さをしみじみと実感したので2〜3記事程度でまとめることとする。前提として、どの記事・参考書よりも短く簡潔に触れていこうと思うので、めっちゃ詳しく勉強したい人は今すぐこのブラウザを閉じてくれ。

## 対象者
この記事は下記のような人を対象にしている。

– (~~ワイのような~~)センスのないエンジニア
– プログラミング初学者

## 構造体とは
構造体とは設計図であり、インスタンス化(PCのメモリにぶっ込む)をして初めて使用することができる。また、インスタンス化とは実体化ともいう。
上記を踏まえて、超大まかに要点だけ絞っていうと二つにまとめることができる。
1. プロパティ(変数や定数)、メソッド(関数)、イニシャライザ(初期化関数)をひとまとめにしたもの
2. 入力(引数)、出力(戻り値)の役割を担うもの

## 詳細
・ インスタンス化を

元記事を表示

【Swift】MintでSwiftGenを導入する

# はじめに
SwiftGenを初めて使ってみたので忘れないように記録しておきます。

# SwiftGenとは
公式からはこのように説明されていました
>SwiftGen is a tool to automatically generate Swift code for resources of your projects (like images, localised strings, etc), to make them type-safe to use.

英語は苦手なので日本語も載せておきます
>SwiftGenは、プロジェクトのリソース(画像やローカライズされた文字列など)に対してSwiftコードを自動生成し、タイプセーフで利用できるようにするツールです。

***どういうことか?***
通常、画像を表示させようと思ったら以下のようになります。
“`swift
Image(“share”)
“`
しかし、SwiftGenを使用すれば以下のように書くことができます。
“`swift
Image(Asset.share.name)
“`

これは便利ですね

# 今回

元記事を表示

【Swift】文字列にNGワードが含まれているか配列で確認するコード

入力値にNGワードが含まれているか配列で確認するコード

## 前提
NGワードの文字列の配列があり、
入力値などの、とある文字列がそれらを1つ以上含んでいるか確認したい

一見`contains`を使えば良さそうにも思えるが、NGワードの配列の要素を1つづつ確認するには繰り返し処理を使わなければならない。

## 解決策

`allSatisfy`を使う

“`swift
// NGワードの配列
var prohibited_words : [String] = []

// 入力値など
var value = textLabel.text

if self.prohibited_words.allSatisfy({ !value.contains($0) }){
// NGワードが1つも含まれていなかった場合の処理
}
else{
// NGワードが1以上含まれていた場合の処理
}
“`
`allSatisfy`は配列の全ての値が条件を満たすか判定するメソッド

https://developer.apple.com/documentation/swift/ar

元記事を表示

スコープ内外のお決まりについて(グローバル変数を添えて)

## はじめに
業務で扱う長いソースコードを長時間見ているとゲシュタルト崩壊を起こし、スコープ内外のお決まりについてすっかり忘れ、凡ミスをするという失態をおかした。そのため、非常に簡単ではあるが改めてスコープの範囲についてまとめる。

## 対象者
この記事は下記のような人を対象である。

– (~~ワイのような~~)センスのないエンジニア 
– プログラミング初学者

## 結論
– スコープにはアクセスできる範囲とできない範囲がある。
– {} ← スコープとはコレのことである。
– スコープ外にアクセスするにはグローバル変数などにする必要がある。
## 詳細
– スコープ内の変数や定数はスコープ内でのみアクセス可能
スコープ内の定数numはスコープ内でのみアクセス可でき、print関数で出力可能。それとは逆にスコープ外でのアクセスやprint関数で出力しようとも出力は不可能である。(スコープ外だと定数numは破棄される)
“`swift:Swift
for i in 1…10 {
//スコープ内の定数
let num = i
print(num)
}

元記事を表示

【Flutter】share_plusがiPadで機能しない

公式に書かれている通りに実装したけど、 AndroidやiPhoneでは機能するのにiPadでは機能しない。

しかも長文の謎のエラーを吐く。

“`
[LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don’t want.
Try this:
(1) look at each constraint and try to figure out which you don’t expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you’re seeing NSAutoresizingMaskLayoutConstraints that you don’t understand, refer to

元記事を表示

【Xcode14】iPadを非対応にする

# はじめに
Xcode14から色々と操作が変わって「これってどうやってやるんだ?」ということが割とあるので毎回記事にできたらなと思います。
今回はXcode14でiPadを非対応にしたいという記事です。

# やりかた
① プロジェクトを選択します
② ターゲットを選択します
③ 「Build Settings」を選択します
④ `Targeted Device Families`と検索欄に入力します
⑤ 背景が緑色の欄をタップします
![スクリーンショット 2022-10-13 20.34.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/dc6b01bd-001f-ffa0-7adb-bc7be7237379.png)

⑥ 「iPhone」を選択します
![スクリーンショット 2022-10-13 20.43.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d48488b7-

元記事を表示

iOSシュミレーターの実機(デバイス)を変えての検証

現在35モデル以上のデバイスを抱える`iPhone`ですが、`Flutter`で開発しているとディスプレイの大きさによって画像の調整が必要になるなど、それぞれで検証しないといけない状況がやってきます。`2022/10`現在の`iOS 16.0`で対応している実機だと、小さいサイズで`iPhone SE(第3世代)`の`4.7インチ`大きいサイズで`iPhone 14 Pro Max`の`6.7インチ`と2インチ(5.08cm)もの差があります。なので`4.7 / 5.4 / 6.1 / 6.7`の4機種を検証に当てると良いかと。

|機種|ディスプレイ(縦横)|
|:———–|————:|
|iPhone 8|4.7インチ(11.938cm)|
|iPhone SE(第3世代)|4.7インチ|
|iPhone 12 mini|5.4インチ(13.716cm)|
|iPhone 8 Plus|5.5インチ(13.97cm)|
|iPhone X|5.8インチ(14.732cm)|
|iPhone 13|6.1インチ(15.494cm)|
|iPhon

元記事を表示

【旧版】iOS(iPhone/iPad) 監視モードとDEPとVPPとABMについての個人的メモ

※この記事は2021/12/25版のバックアップです。

# はじめに

最初に書いてから数年経過しているので、古い情報が混じっている場合があります。
また、元は個人的メモなのでいい加減な書き方になっています。
「もっと詳しく(まともに)書け」といった項目があれツッコミをどうぞ。

この内容は、iOSの監視モードおよび、DEPとVPPについてまとめたものです。
Apple School Managerについては触れていません。
MDMについては、具体的な製品名にはあまり触れず、機能概要のみの記載に留めます。
特定MDM/EMMのトラブルシュートとかは書いてません。Intuneとか。
MDMのUser Enrollmentについても触れていません。

Androidで似たようなことをやりたい場合は「[Android Enterprise](https://qiita.com/garupon/items/844770b1eb48ac004ced)」と「[Zero Touch](https://www.android.com/intl/ja_jp/enterprise/management/

元記事を表示

OTHERカテゴリの最新記事