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

iOS関連のことを調べてみた2022年05月04日
目次

「Command CompileSwift failed with a nonzero exit code」を乗り越える

![スクリーンショット 2022-05-03 0.20.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7b36a943-fecc-924d-5032-26bdf164c45c.png)
# いろいろな原因があるっぽい
https://qiita.com/Hyperbolic_____/items/e6f2f82acd559f6e1c79

https://qiita.com/Kyome/items/67da66563fc15d48699e

https://qiita.com/wagatsuma1999pra/items/cdc08e2913d89e62b747

解決策で多かったのは
– Clean Build Folder
– XCodeの再起動
– /Library/Developer/Xcode/DerivedDataの削除
– Simulator再起動
– アプリをアンインストール

こんなところでしょうか

# 他のエラーとの違い
エラー文に明確な原因が書かれていない

元記事を表示

【SwiftUI】アラートがなんか使いずらい

# 標準アラート
“`Swift
import SwiftUI

struct ContentView: View {
@State var ShowAlert: Bool = false
var body: some View {
VStack {
Button(“アラート表示”) {
ShowAlert.toggle()
}
}
.alert(isPresented: $ShowAlert) {
Alert(title: Text(“アラート”), message: Text(“アラートが表示されました。”), dismissButton: .default(Text(“OK”)))
}
}
}
“`

# カスタムアラート
“`Swift
import SwiftUI

struct ContentView: View {
@State var ShowAlert: Bool

元記事を表示

CloudKitで自動連携されない問題の対策 CloudKit – “Invalid bundle ID for container”

CloudKitを用いてCoreDataをクラウドに自動バックアップしようとしたができない場合があった。

デバッグ画面を眺めていたら、「Invalid bundle ID for container」とあったのでこのエラーが出た場合の対策をメモしておく。

内部で紐付けがうまくいってないのか分からないけどこれで上手くいった!

## 対策
① Xcodeでコンテナの選択を解除する
② developer.apple.comでコンテナの選択を解除し、保存する

Certificates, Identifiers & Profiles→Identifiersから対象のアプリを選択すれば以下のような画面が現れる。
Editからコンテナの選択を解除できる

![Screen Shot 2022-05-02 at 15.35.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426420/76c7c1ba-d32f-e25e-6739-6a5834dc1a3f.png)

③ 2で選択を解除したコンテナを再度

元記事を表示

iOS13〜のCompositionalLayoutsでバッジを表示する

# はじめに
最近、AppStoreに公開されているアプリで「iOS13〜のサポート」というアプリが増えてきた印象です。
ってわけで、そろそろこの辺を今更ながらキャッチアップしていこうということで勉強したので、CollectionViewにバッジを表示する方法をまとめてみました。

# WWDC2019の動画で紹介されている
https://developer.apple.com/videos/play/wwdc2019/215

こちらのセッションの30分くらいからバッジに関する説明がされています。
この説明は、`iOS13〜のCompositionalLayouts`を使ってバッジを表示するという説明であり、実際にはこちらのコードだけでは動かないため、今回は、バッジを表示するために必要なすべてのコードをこちらの記事にまとめさせていただきました。

# 今回作る画面
リリース前にAppStoreリンクを知る方法

# はじめに
「アプリにシェア機能を付けたいけどまだリリースしてないからURLがわからない…」
「1回リリースしてから追加でシェア機能つけよう!」

今までこう思ってました。

しかし、リリース前にAppStoreのリンクを知る方法を見つけたので紹介します。

もしかしたら、自分だけが知らなかった可能性も…笑

# AppStoreのURL
AppStoreのURLはこのようになっています
https://apps.apple.com/jp/app/{アプリ名}/id{アプリID}

**必要な情報**
– アプリ名
– アプリID

上記2つをリリース前に知ることができればAppStoreURLをゲットです

# やっていく
### アプリID
App Store Connectに追加した状態からスタートします。

![スクリーンショット 2022-04-30 19.46.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1dbfdbe6-21c0-7dfa-bd39-d

元記事を表示

ServiceNowのServicePortalをiPadのWebViewで表示

WKWebViewでServicePortalを表示する

結論

公式ドキュメントに則って、URLにServicePortalのURLを貼り付ければWebViewでServicePortalを表示することが可能。

環境

Xcode : 13.2/iPad Air 5th/iOS : 15.3

実装方法

公式Docs : https://developer.apple.com/documentation/webkit/wkwebview

以下、コード。

“`
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {

var webView: WKWebView!

override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKW

元記事を表示

Xcode Capabilities Background Modesのまとめ

# はじめに
iOSアプリのバックグラウンド動作は管理された配下で動作します。
そこで、CapabilitiesのBackground Modesの選択肢についてまとめてみます。

# 詳細
[Configuring Background Execution Modes](https://developer.apple.com/documentation/xcode/configuring-background-execution-modes)に概要は記載されています。
各項目は下記のように記載されています。

| 項目 | 詳細 |
| :——

元記事を表示

Storyboardを無効化する

## やること

– main.storybordの削除
– .xcodeprojの編集
– Info.plistの編集
– SceneDelegate.swiftの編集

## main.storybordの削除

main.storybordを削除するだけ

## .xcodeprojの編集

`General > Deployment Info`

Main Interface を空にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648522/c9145eb2-8271-4fb2-b8e7-e42be7b1802f.png)

## Info.plistの編集

`Information Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0`

Storyboard Nameを削除
![image.png](https://qi

元記事を表示

for/for in/forEach/enumeratedの処理速度について

enumeratedも含めての処理速度についての記事が見当たらなかったので、実験を兼ねての投稿。

## 確認に使用するコード
“`swift
let array: [Int] = Array(0…10000)

// for
var start = Date()
for i in 0 ..< array.count { print(i) } var elapsed = Date().timeIntervalSince(start) print("for : \(elapsed)") // for in start = Date() for i in array { print(i) } elapsed = Date().timeIntervalSince(start) print("for i

元記事を表示

SwiftUIで花火エフェクトを作成(高度なアニメーション)

SwiftUIで花火エフェクトが簡単に作成できます。
この記事では、そうしたエフェクトの作り方を順を追って説明していきます。
また、SwiftUIで高度なアニメーションを設計する方法を学びましょう!

![ezgif-3-8f467ca52f.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/eec1c5d9-5ade-64c9-14d1-ad0979ef2d8a.gif)

## 花火粒子の動きの分析

効果をデザインするには、時間の経過とともにオブジェクトがどのように動くかを理解する必要があります。

花火の場合は、個別の粒子が多くあります。
粒子ごとに動きはランダムになります。
全体的な形状は以下の図のようになります:

![firework-overall-diagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/509d2c70-a296-b002-7718-18598726f07e

元記事を表示

Azure Spacial anchorsを使ったマルチプラットフォーム位置共有方法でつまずいた点

# はじめに
この記事は、自分がHoloLens2とAndroidとでマルチプラットフォーム化する際に困った部分を記載している記事になります。

※バージョンが更新された場合修正されているかもしれないので気を付けてください。

# 前提条件
公式がだしているAzure Spacial Anchorsのチュートリアルドキュメント

https://docs.microsoft.com/ja-jp/learn/modules/azure-spatial-anchors-tutorials/

イワケンさんが出されている記事を参考にし

https://zenn.dev/iwaken71/articles/hololens-2022-2#%E3%82%B7%E3%83%BC%E3%83%B3%E3%81%AE%E6%BA%96%E5%82%99-(%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB)

これらを一通り実践してから自分のつまづいたところを確認していただけると
理解しやすくなると思います。

元記事を表示

【XCode】Build input file cannot be found: ‘/Users/xxxxxxxxxxxx/xxxxxxxxx/xxxxxxxxx/xxxxxxxxx/Info.plist’を対処する

# 原因
Info.plistを移動させた


“`
AdMob-Earning-Widget/Info.plist

↓ ↓ ↓ 変化 ↓ ↓ ↓

AdMob-Earning-Widget/Resources/Info.plist
“`
ファイルパスがこのように変化しました

# 解決方法
![スクリーンショット 2022-04-28 17.16.34.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

【Swift】AdMobメディエーションについて

# メディエーションとは?
> メディエーションは、アプリに広告を配信するすべての広告ソースを 1 か所で管理できる AdMob の機能です。メディエーションを使用すると、届いた広告リクエストを複数の広告ソースに送信し、使用可能かつ最適な広告ソースを確実に見つけて広告を掲載することができます。メディエーションでは、メディエーション グループを使用します。これにより、最適化された掲載結果に基づいてすべての広告ソースをランク付けして、収益を最大化することができます。
[AdMob メディエーションの概要](https://support.google.com/admob/answer/3063564?hl=ja)

なんか難しそうですね
あってるかは知りませんが僕の解釈はこうです。
「色んな広告会社を競わせて1番価値の高い広告を表示できるよ」
こんな感じで思ってます。

仕組みなんて正直どうでもいいんです
「収益を最大化することができます」ここが重要なんです笑
ここしかみてません

# メディエーションには2種類ある!?
**入札**
リアルタイムに競わせて1番高い広告を表示

**ウォー

元記事を表示

iOSのリッチプッシュが動かないときに確認すること

# はじめに
リッチプッシュの実装がうまく動かない!できない!そんなときに確認すると良いところを紹介します。僕はかなり長い時間悩まされました。
おそらく同じ悩みを抱える人がいると思うので記事にしておきます!
証明書関係の設定や、具体的なプッシュ通知の実装方法は記載していないので別の記事を参考にしていただければと思います。

# 確認ポイント
## ①iOSのバージョン
Extensionファイルの対応iOSバージョン(以下の画像の矢印の部分)が、アプリの対応iOSバージョンと同じでないとリッチプッシュは届きません!(僕はここでめちゃくちゃハマりました。)
![スクリーンショット 2022-04-2713.54.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2644705/fc7050f6-9027-b85f-dd1f-2adf8fa33414.png)

## ②ペイロード内に”mutable-content”
他の記事でもこれに関してはほぼ書かれているので大丈夫かと思いますが、リッチプッシュ

元記事を表示

CleanArchitectureを参考にしてサンプルアプリ作ってみた

# 投稿の経緯
私が参加しているコミュニティにてCleanArchitectureの輪読会をしました。ただ読むだけでは学びにならないので、サンプルアプリを元にアウトプットしていきます。

参加しているコミュニティはこちら?

https://community.camp-fire.jp/projects/view/280040

# CleanArchitectureについて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/2e282424-14c8-8c37-11f1-5023db0bd1c0.png)

CleanArchitectureを要約するとドメイン駆動開発(DDD)やユースケース駆動開発(UCDD)を意識して、ビジネスロジックをUIやFrameworkから引き離し、それぞれの層毎に役割と責任を分離したしたArchitectureです。

CleanArchitectureはSOLID原則を突き詰めたArchitectureだと思っています。

### SOL

元記事を表示

iOSのクリップボードについて調べた(Swift)

# クリップボードを取得する
**[String](https://developer.apple.com/documentation/uikit/uipasteboard/1622092-string) [(Strings)](https://developer.apple.com/documentation/uikit/uipasteboard/1622091-strings)**
“`Swift
// String
if let string = UIPasteboard.general.string {
print(string)
}
// Strings
if let strings = UIPasteboard.general.strings {
print(strings)
}
“`
**[Image](https://developer.apple.com/documentation/uikit/uipasteboard/1622069-image) [(Images)](https://developer.apple.com/documentation

元記事を表示

Alamofireでもasync / awaitがしたい!

## 概要
async / awaitがしたい!
こんな感じでAlamofireを使用している処理を書き直したい!

“` swift
final class WeatherAPI {
func get(success: @escaping ((WeatherForecastResponse) -> Void), failure: @escaping ((Error) -> Void)) {
AF.request(“https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json”).response { response in
switch response.result {
case .success(let element):
do {
success(try JSONDecoder().decode(WeatherForecastResponse.self,

元記事を表示

[iOS][Swift]CombineでUIKitのUI更新を実装してみる

データバインディングに関してはRxSwiftを基本的には使用してきました。
しかしiOS13からバインディングのライブラリとしてSwiftUIと同時にCombineが登場しました。
そこで使用感を比較するためにCombineを使った実装をしてみようと思います。
async/awaitの実装と組み合わせる場合など注意事項もあったのでご紹介いたします。

サンプルコードに関してはこちらの記事の続きです。
[[iOS][Swift5.5]async/awaitを使った通信処理のサンプル実装](https://qiita.com/bu-ka/items/258099de42aae50f4d77)

# やること
ViewModelでasync/awaitを利用した通信処理でデータを取得してViewModelのプロパティの値を更新します。
そしてその値を元にUIが更新されるようにします。

# `@Published`
“`ViewModel.swift

@Published var title = “”

“`
このようにプロパティに`@Published`を付けることによっ

元記事を表示

関数の引数に関数を指定する(クロージャ)

# はじめに
最近まで「関数の引数に関数を指定する」のやり方がわからなかったのですがちょっと理解したので今後、見返せるようにまとめておきます

# クロージャについて
公式のクロージャのサンプルです

“`Swift
let sum = { (x: Int, y: Int) -> Void in
print(x + y)
}

sum(7, 8) // OK
sum(x: 7, y: 8) // エラー
“`
これはクロージャ定数というものです
クロージャ定数を使ってみて不思議だったのが使用時に引数名を記述してはいけないという点です。
関数と同じ様な使い方なので今までの自分では関数との区別ができていなかったです。

また、デフォルト値の指定ができない様です
“`Swift
// ❌
let sum = { (x: Int = 0, y: Int = 1) -> Void in
print(x + y)
}
“`

# 関数の引数に関数を指定
これが今回のメインです
これは「関数の引数にクロージャを使う」というみたいです
“`Swift
struct Conte

元記事を表示

SwiftUIアプリにおける非同期処理の基本

# この投稿は何?
Swift 5.6で導入された言語機能「async/await構文による非同期処理」について、シンプルなアプリ開発を通して学びます。

## 環境
– macOS 12.3.1
– Xcode 13.3.1
– Swift 5.6

## 非同期関数
非同期的に実行される関数を定義するには、宣言に`async`キーワードをマークします。
そして、ボディではコード実行を一時的に停止(サスペンド)する箇所を、`await`キーワードでマークします。

“`Swift:非同期関数の基本的な構文
func someFunction() async {
await anotherAsyncFunction()
}

await someFunction()
“`

非同期関数の呼び出し時には、`await`キーワードをマークする点に注目できます。

# 開発するアプリの概要
SwiftUIフレームワークを使って、「スライダーでテキストの不透明度を制御する」アプリを開発します。

## 非同期的な処理を理解する方法
開発するアプリではスライダーの他に、以下に挙げる2

元記事を表示

OTHERカテゴリの最新記事