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

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

iOS App Dev Tutorialsを読んで実際にやってみた。その2

##  この記事を始めた理由
AppleがiOSのチュートリアルを出していたので、これを全部やってアプリが作れるか試してみた。
##  前回の記事
 [iOS App Dev Tutorialsを読んでみた。その1](https://qiita.com/shomiya181210/items/5b6d261938f650509255) 前回の記事を読んだ後、この記事をごらんください。
## 今回の範囲
 [Using stacks to arrange views ](https://developer.apple.com/tutorials/app-dev-training/using-stacks-to-arrange-views)
 第2回目は実際にXcodeを使って会議タイマーの画面を作成してみる。
## 内容の要約
###  1 : プロジェクトを新規作成する
####  ( 1 ) :Xcodeを開き新しいテンプレートを作る。
    SUI_010-010-020@2x.png[Swift] クロージャについて理解する

Qiita初めての投稿になります。Swift初学者Yasuと申します。
Swift学習歴5ヶ月ほどの初学者ですが、
自身の学習アウトプット、整理も含め投稿始めました。
今回はクロージャについてまとめました。

## クロージャとは
#### 処理を定義しつつ、周りのデータを取り込んで、後から実行できるもの。
みたいなイメージです。

初めはあまりピンとこないかと思いますが、
この記事を読み終える頃にイメージが湧いてると嬉しいです。

# クロージャの定義方法
“`closure.swift
{ (仮引数: 型,…) -> 型 in
文…
}

//関数の場合と比較
func 関数名(仮引数: 型,…) -> 型 {
文…
}
“`
こうして見て見ると、クロージャと関数の共通点がいくつかあるのが分かりますね。
クロージャと関数を見極めるポイントとしては、
– funcキーワードの有無
– 関数名の有無
– inの有無
– {}の位置

# クロージャを実行してみる
“`
//cにクロージャのイ

元記事を表示

【Swift】ループ内を並列処理する

# はじめに
DispatchQueueを使用しての並列処理の例はいくつも出てきますが、Swift Concurrencyでの並列処理の例はなかなか見つからなかったので記事にしておきます。

# DispatchQueue
“`swift
func sample1() {
let dispatchGroup = DispatchGroup()
let dispatchQueue = DispatchQueue(label: “sample”, attributes: .concurrent)
for i in 0..<10 { dispatchQueue.async(group: dispatchGroup) { Thread.sleep(forTimeInterval: TimeInterval(Int.random(in: 1...10))) print(i) } Thread.sleep(forTimeInterval: 1.0) } } ``` #

元記事を表示

Luma AIのスキャンシーン和訳

# はじめに
この記事は現在(2022/10/20)TestFlightで配信されている、ベータ版Lumaの記事になります。

https://lumalabs.ai/

ホームページの`waitlist`より、ベータテスターの申し込みができるので、興味のある方はぜひ応募してみてください。

# 内容

> Align the crosshair to the object you wish to scan and tap on screen.

スキャンしたい対象物に十字を合わせ、画面上をタップします。

【Flutter】iOSでバックグラウンドオーディオがうまく機能しない

audioplayers0.20.1 を使ってオーディオをバックグランドで再生しようとすると、iOSでうまく機能しない。
解決策が見つかったので書き残します。
“`info.plist
UIBackgroundModes

audio

“`
info.plistに上記を追加します。

“`Swift:AppDelegate.swift
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRe

元記事を表示

iOS App Dev Tutorialsを読んでみた。その1

## この記事を始めた理由
AppleがiOSのチュートリアルを出していたので、これを全部やってアプリが作れるか試してみた。

## 今回の範囲
[Getting started with Scrumdinger ](https://developer.apple.com/tutorials/app-dev-training/getting-started-with-scrumdinger)
第1回目は今回やっていくチュートリアル、Develop apps for iosの概要を理解するための概要を読んでまとめてみる。

## 内容の要約
### 1 : このモジュールについて
*  このチュートリアルではSwiftUIを使用する。
*  このチューとリアルでSwiftUIの基礎を学ぶ。

### 2 : Swift UIの概要
*  SwiftUIはあらゆるAppleのアプリ基礎を構築するための言語。
*  SwiftUIを使えばより早くより正確にエラーを少なくアプリを
作成することができる。
*  宣言的な構文でシンプルなSwiftを使用して画面に映される内容
を決定する。
*  

元記事を表示

iOSアプリ配信時の流れ

## 前書き
2年前くらいにiOSアプリ開発した際にアプリ配信するまでの流れをすんなり理解できず、
いろいろ調査してまとめた資料を公開してみようと思い立ちました。

## 本題
資料といっても1枚絵にまとめた俯瞰図です。
個人で調べてまとめたものなので誤りがあるかもしれません。
また、配信方法に関してはよく変更されるようなので正確な情報は公式ページを参考にしてください。

![iOSアプリ配信方法俯瞰図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488612/a62af872-5b79-476d-3694-20951ce38aa0.png)

#### 用語補足
* Apple Developer Program(ADP):個人または企業が登録可能なメンバーシップ

* Apple Developer Enterprise Program(ADEP):企業のみが登録可能なメンバーシップ

* Apple Developer:アプリ開発に必要な機能を提供する無料Webサービス(ADP/ADEP必須)

元記事を表示

【Swift】Alamofireでasync/awaitを使う

# はじめに
「alamofire async」で検索すると`withCheckedThrowingContinuation`を使ってasyncを使用している記事が多く出てきますが、実は標準でasync/awaitを使えるみたいです。
今回はそのやり方を紹介できたらと思います。

# やりかた
### String
“`swift
let response = await AF.request(url, method: .get, headers: headers).serializingString().response
switch response.result {
case .success(let data):
print(type(of: data)) // String
case .failure(let error):
print(type(of: error)) // AFError
}
“`

### Data
“`swift
let response = await AF.request(url, method: .get, headers:

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事