- 1. WKWebViewでServicePortalを表示する
- 1.1. 結論
- 1.1.1. 環境
- 1.1.2. 実装方法
- 1.1.3. Xcode Capabilities Background Modesのまとめ
- 1.1.4. Storyboardを無効化する
- 1.1.5. for/for in/forEach/enumeratedの処理速度について
- 1.1.6. SwiftUIで花火エフェクトを作成(高度なアニメーション)
- 1.1.7. Azure Spacial anchorsを使ったマルチプラットフォーム位置共有方法でつまずいた点
- 1.1.8. 【XCode】Build input file cannot be found: ‘/Users/xxxxxxxxxxxx/xxxxxxxxx/xxxxxxxxx/xxxxxxxxx/Info.plist’を対処する
- 1.1.9. 【Swift】AdMobメディエーションについて
- 1.1.10. iOSのリッチプッシュが動かないときに確認すること
- 1.1.11. CleanArchitectureを参考にしてサンプルアプリ作ってみた
- 1.1.12. iOSのクリップボードについて調べた(Swift)
- 1.1.13. Alamofireでもasync / awaitがしたい!
- 1.1.14. [iOS][Swift]CombineでUIKitのUI更新を実装してみる
- 1.1.15. 関数の引数に関数を指定する(クロージャ)
- 1.1.16. SwiftUIアプリにおける非同期処理の基本
- 1.1. 結論
「Command CompileSwift failed with a nonzero exit code」を乗り越える

# いろいろな原因があるっぽい
https://qiita.com/Hyperbolic_____/items/e6f2f82acd559f6e1c79https://qiita.com/Kyome/items/67da66563fc15d48699e
https://qiita.com/wagatsuma1999pra/items/cdc08e2913d89e62b747
解決策で多かったのは
– Clean Build Folder
– XCodeの再起動
– /Library/Developer/Xcode/DerivedDataの削除
– Simulator再起動
– アプリをアンインストールこんなところでしょうか
# 他のエラーとの違い
エラー文に明確な原因が書かれていない
【SwiftUI】アラートがなんか使いずらい
# 標準アラート
“`Swift
import SwiftUIstruct 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 SwiftUIstruct 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からコンテナの選択を解除できる
③ 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に追加した状態からスタートします。 {
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 を空にする
## Info.plistの編集
`Information Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0`
Storyboard Nameを削除
// 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で高度なアニメーションを設計する方法を学びましょう!
## 花火粒子の動きの分析
効果をデザインするには、時間の経過とともにオブジェクトがどのように動くかを理解する必要があります。
花火の場合は、個別の粒子が多くあります。
粒子ごとに動きはランダムになります。
全体的な形状は以下の図のようになります:
これらを一通り実践してから自分のつまづいたところを確認していただけると
理解しやすくなると思います。
ま
【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
“`
ファイルパスがこのように変化しました# 解決方法
なんか難しそうですね
あってるかは知りませんが僕の解釈はこうです。
「色んな広告会社を競わせて1番価値の高い広告を表示できるよ」
こんな感じで思ってます。仕組みなんて正直どうでもいいんです
「収益を最大化することができます」ここが重要なんです笑
ここしかみてません# メディエーションには2種類ある!?
**入札**
リアルタイムに競わせて1番高い広告を表示**ウォー
iOSのリッチプッシュが動かないときに確認すること
# はじめに
リッチプッシュの実装がうまく動かない!できない!そんなときに確認すると良いところを紹介します。僕はかなり長い時間悩まされました。
おそらく同じ悩みを抱える人がいると思うので記事にしておきます!
証明書関係の設定や、具体的なプッシュ通知の実装方法は記載していないので別の記事を参考にしていただければと思います。# 確認ポイント
## ①iOSのバージョン
Extensionファイルの対応iOSバージョン(以下の画像の矢印の部分)が、アプリの対応iOSバージョンと同じでないとリッチプッシュは届きません!(僕はここでめちゃくちゃハマりました。)
## ②ペイロード内に”mutable-content”
他の記事でもこれに関してはほぼ書かれているので大丈夫かと思いますが、リッチプッシュ
CleanArchitectureを参考にしてサンプルアプリ作ってみた
# 投稿の経緯
私が参加しているコミュニティにてCleanArchitectureの輪読会をしました。ただ読むだけでは学びにならないので、サンプルアプリを元にアウトプットしていきます。参加しているコミュニティはこちら?
https://community.camp-fire.jp/projects/view/280040
# CleanArchitectureについて
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