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

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

【SwiftUI】リワード広告の表示

# はじめに
多くのドキュメントはUIKitで書かれていてSwiftUIで書かれていることはほとんどありません。
ドキュメントを見て毎回書き直すのは苦痛です。楽しくありません。
今回のお題である[AdMobのリワード広告ドキュメント](https://developers.google.com/admob/ios/rewarded?hl=ja)もUIKitで書かれています。
今後、同じ事をするであろう方のために書き直したものを公開しておきます。

# 実装準備
実装の前に[スタートガイド](https://developers.google.com/admob/ios/quick-start?hl=ja)に記載してある事を行います

①: Mobile Ads SDK のインポート
②: Info.plist の更新
③: Mobile Ads SDK の初期化

こちらはUIKitでもSwiftUIでも同じなので割愛します
これが終われば準備は完了です。

# 実装
“`Reward.swift
import GoogleMobileAds

class Reward: NSObj

元記事を表示

【SwiftUI】Lottieでアニメーションを表示する

# Lottieとは
![](https://github.com/airbnb/lottie-ios/raw/master/_Gifs/Examples1.gif)

https://github.com/airbnb/lottie-ios

簡単にアニメーションを表示できるライブラリです
[こちら](https://lottiefiles.com/featured)で公開されているアニメーションがすぐ使えるようになります。
そしてとても軽いので使いやすいです。

# インストール
– CocoaPods
– Carthage
– Swift Package Manager

上記3つがサポートされています。

今回はSwift Package Managerでインストールしていきます。

①: [lottie-ios](https://github.com/airbnb/lottie-ios)のURLをコピー
![スクリーンショット 2022-05-07 15.06.30.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

[Xcode] The value for key CFBundleShortVersionString [hoge] in the Info.plist file…に対する処方箋

## 初めに
iOSアプリをAppStoreに新しいバージョンをリリースする際にこんなエラーに当たったので解決方法を載せておきます。

今回のエラーはアプリをアーカイブし、その後Validate Appをした際に発生しました。

![スクリーンショット 2022-05-07 14.43.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/f68d4653-ec6b-9bb6-1d00-677813e4a9e4.png)

## 原因
今リリースしている(アーカイブした)バージョンよりも低いまたは同じ数値を設定しているために発生していると思われます。
例えば、バージョン1.1.0で公開しているものをバージョン1.0.1などでアーカイブしようとした場合です。

## 解決方法
メニューバーより>Product>Archiveから今回リリースしたいアプリを選択し、バージョンを確認しましょう。
今回審査に提出したいバージョンが1.0と前回提出したバージョンより低い数値にになっています。
(()な

元記事を表示

Godot用 iOS版 Firebase Cloud Messagingのプラグインを作った

## 概要
以前、似た内容で[Godot用iOS版 Firebase Analyticsのプラグイン](https://qiita.com/yokochi@github/items/7df54cbf331408d1255d)を作りました
今回はプッシュ通知を送りたかったのでFirebaseのCloud Messagingのほうのプラグインになります。

作成したプラグインはこちらです
https://github.com/funseek/godot-ios-firebase-message

プラグインの作成方法は上記のプラグインと流れはまったく同じです。

## PlayFabでもプッシュ通知を送りたい
現在作成しているゲームではバックエンドに[PlayFab](https://azure.microsoft.com/ja-jp/services/playfab/)を利用しています。
全員にプッシュ通知をする場合はFCM、何かのトリガーで個別にプッシュ通知を送りたい場合はPlayFab側で送信という想定です。

ですので、PlayFab側にもプッシュ通知で必要なトークンを登録してあげ

元記事を表示

ID を持つエンティティにはIdentifiableを積極的に採用

## before
“`
struct User: Decodable {
let id: Int
}

struct UserDataSource {
// 引数はIntであればなんでも受け入れるように見えてしまう。
func loadUser(for id: Int) -> User {
// 本来はDBなどから取得したものを返すなど
}
}
let user = UserDataSource().loadUser(for: 1)
“`

## after
“`
struct User: Decodable , Identifiable {
let id: Int
}

struct UserDataSource {
func loadUser(for id: User.ID) -> User {
// DBなどから取得したものを返すなど
}
}

元記事を表示

【Flutter】XcodeでCould not inspect the application package.というエラーと2日戦った話

掲題のエラーと戦い続け、とても単純な原因で休日を2日潰しました。
私及び読者が同じ轍を踏まないように戒めとして残しておきます。
※エラー原因が特殊だった可能性もあるので、あくまでも一例としてご理解ください。

## 結論 (原因)

**pubspec.yml**のassetファイルのパス指定ミスが原因。


before: **lib/asset/aaa/image**
after : **asset/aaa/image**

## 事象概要
– 半年ぶりに自分のアプリをアップデートしようと思い、各種プラグイン/Flutter/Gradle/Pod諸々全て最新に更新
– XcodeにてiOSの実機ビルドは成功するがインストール時に以下発生

“`
Details

Unable to install “Runner”
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402653103
User Info: {
DVTErrorCreationDateKey = “2022-05-05 04:09:24 +0000

元記事を表示

SwiftUIでAPI(クロージャとasync/await)を利用するViewModelクラスをテストする

## アプリ
SwiftUIにて、任意のユーザー名のGitHubリポジトリを取得し、スターの数が50以上のものをリスト表示します

## SwiftUIのターゲット構成
GitHubリポジトリを取得するAPIメソッドをクロージャとasync/awaitの2つ用意しました
また、APIを利用するViewModelクラス(GitHubRepositoryManager)をXCTestによる単体テストします

| クラス | 説明 |
|:-|:-|
| GitHubRepository | GitHubリポジトリのEntityクラス |
| GithubAPIClient | APIクライアント |
| GitHubRepositoryManager | リポジトリ一覧を取得するViewModelクラス |
| GitHubRepositoriesView | リポジトリ一覧を表示するViewクラス |

## GitHubリポジトリのEntityクラス
“`swift:GitHubRepository.swift
struct GitHubRepository: Co

元記事を表示

第3回iPhoneアプリ開発入門

# はじめに
今回は、カウンターアプリを装飾していきます。まず、前回のプロジェクトを開いてください。

# Modifier
まず、ボタンを装飾します。次のように書き換えます。

![スクリーンショット 2022-05-05 12.30.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/ccdff0db-36c1-c1fb-f0f2-3f3af50a7e8c.png)

Buttonに「.buttonStyle(.borderedProminent)」とつけることで、Buttonの見た目を整えることができました。このような、Viewの見た目を整えるものをModifierといいます。ちなみに、Textについている「.padding()」は余白をつけるModifierです。

# 背景色を変える
次に、背景色を変更します。
![スクリーンショット 2022-05-05 12.47.54.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

第2回iPhoneアプリ開発入門

# はじめに
今回は、前回作ったカウンターアプリを改良しながらプログラミングについて学びます。

# 前回作ったプロジェクトを開く
まず、前回作ったプロジェクトを開きます。Xcodeを起動すると表示されるこの画面の右側から、最近使ったプロジェクトを開けます。この画面が表示されない場合は、Xcodeを選択した状態で、「コマンド+シフト+1」キーを押します。
![スクリーンショット 2022-05-03 19.13.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/31d2e475-0bba-7285-4f1a-320267dfde2a.png)

# if文
前回は、ボタンを押すと押した回数だけ数字が増えました。では、今度は数字に上限を設けましょう。ソースコードの17行目あたりを下のように書き換えます。
![スクリーンショット 2022-05-03 19.57.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

第1回iPhoneアプリ開発入門

# はじめに
この記事では簡単なカウンターアプリを作成して、プログラミング初心者向けにiPhoneアプリの作り方を解説します。
![スクリーンショット 2022-05-01 20.13.57.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/17c8ef26-816a-cf94-9014-2579f6b0c038.jpeg)

# 必要なもの
– Mac

# Xcodeのダウンロード
まず、MacにXcodeというアプリをダウンロードします。このアプリを使ってアプリ開発を進めていきます。
https://apps.apple.com/jp/app/xcode/id497799835?mt=12
上記のリンクをクリックして、App Storeでダウンロードしてください。これには時間がかかります。
![スクリーンショット 2022-04-22 18.54.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

【Swift】オリジナルのSFSymbolを作成する

# 素材
![スクリーンショット 2022-05-05 0.18.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/5a400211-3a69-4471-0893-ffc7179d0f0e.png)
今回はTwitterの公式から提供されている「[Twitter logo](https://about.twitter.com/en/who-we-are/brand-toolkit)」をSFSymbol化していこうと思います。

# 手順1
![スクリーンショット 2022-05-05 0.18.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7d12d4bc-eba0-e8a7-e763-dc20a0af5b55.png)

初めに「circle」を選択します。

![スクリーンショット 2022-05-05 0.19.02.png](https://qiita-image-stor

元記事を表示

ARKitの3次元座標を画面上の2次元座標に変換する

# AR3次元座標が画面上の2次元座標のどのポイントに当たるのか

# ARKitで一発で取得

“`swift
func session(_ session: ARSession, didUpdate frame: ARFrame) {
let pointInDisplay = frame.camera.projectPoint(node.simdWorldPosition, orientation: .portrait, viewportSize: view.bound.size)
}
“`

?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)

元記事を表示

Xcode13でUser-Difined Settingを使用して、debugとreleaseで値を切り替える

# 目次
– [はじめに](#はじめに)
– [環境](#環境)
– [実装方法](#実装方法)
– [さいごに](#さいごに)

# はじめに
個人開発したiOSアプリに「Google AdMob」を導入した際に、テスト環境と本番環境で値を切り替えたい場面がありました。
その際にXcodeで用意されている「User-Difined Setting」という機能が便利に活用できたので、今回記事にしてみました。

# 環境
– Xcode13.2.1
– Swift5

# 実装方法
実装方法は非常にシンプルです。

– XcodeのPROJECTを選択した状態で、「Build Settings」タブを選択し、「+」ボタンから「Add User-Defined Setting」を選択します。
![スクリーンショット 2022-05-04 18.58.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793562/62b11a42-6052-b919-144f-f3971931a58c.png)

– 「

元記事を表示

UICollectionViewCellのXIBからContentViewが消えた?

![Xcode-13.1](https://img.shields.io/badge/Xcode-13.1-brightgreen)

## はじめに
この前モブプロ?のようなことをやっていると `UICollectionViewCell` の XIB に `contentView` がない!なんでだ?ということがありました。

## 現象
どうやら Library(右上の+ボタン)から追加すると `contentView` ありで生成され、クラスファイル作成時に Also create XIB file をチェックして追加すると `contentView` なしで生成されるようです。

cell

Interface Builder の上のセルが XIB チェックで作成したセル、下のセルが Library から追加したセル

元記事を表示

【Swift】レビューについて

# やり方1
アプリ内でレビュー依頼を行う
“`Swift
import StoreKit // 必須

if let windowScene = UIApplication.shared.windows.first?.windowScene {
SKStoreReviewController.requestReview(in: windowScene)
}
“`

# やり方2
AppStoreのレビュー欄に遷移する
“`Swift
guard let url = URL(string: “https://itunes.apple.com/app/id{アプリID}?action=write-review”) else { return }
UIApplication.shared.open(url)

元記事を表示

「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

元記事を表示

OTHERカテゴリの最新記事