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

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

swiftのHelloworldにGoogle AdMovのテスト広告(バナー)をくっつけた

不労所得とかいうものが欲しかったので、手始めにiOSアプリに広告をつけてみようとしたらテスト広告だけでかなり手こずって一日費やしてしまったので覚書。
普通に働いた方が早い。

### 最終的に動いた手順
####Google AdMovに登録する
最近はGoogle AdMovって呼ぶらしい。前はなんか名前が違った気がする。
コロコロ仕様も変わりそうなのでこんなこと覚えてる暇があったら普通に働いた方が早い。

登録は[ここ](https://admob.google.com/intl/ja/home/)から。

####AdMovのダッシュボードから広告をつけたいアプリを登録する。
登録してないアプリでテスト以外の広告を流すと最悪垢バンされるらしい。
テスト広告だけなら関係なさそうなので割愛。

####Xcodeでプロジェクトを作成
特に難しいことはないが、AppDelegate.swiftと(Game)ViewController.swiftが最初からあるテンプレだと楽かも。

ここから先はAdMovの[スタートガイド](https://developers.google.

元記事を表示

【TIPS】Testing for State Restoration

iOS13以降からState RestorationはNSUserActivityを利用したものに変わりましたが、[サンプルコードのTest State Restoration on a Device](https://developer.apple.com/documentation/uikit/uiscenedelegate/restoring_your_app_s_state)にテスト方法が載っていたため紹介します。

文章は、サンプルコードの手引きの内容に具体的なステップを足したものです。

# テスト方法

アプリケーションを実行し、復帰したい画面でホームボタンを押す。ホーム画面に戻ったらXcodeの停止ボタン(もしくは停止のキーボードショートカット)を実行し、その後ホーム画面から開く。こうすることでState Restorationをテストすることができる。

※ Xcodeの実行ボタンから再実行させるとテストできないので注意

元記事を表示

開発期間におけるアセット管理戦略の選択

今回の主な話題:開発期間におけるアセット管理戦略の選択、iOS 14起動時にクラッシュする、IL2CPP暗号化:iOSでglobal-metadata.datの復号化問題、プログラムでコントロールできる3Dアクションの実現方法、Unity Editor内ScreenのWidthとHeight。


###Resource
Q:パッケージ化にAssetBundleが必要ですが、開発中にAssetBundleを使うことはあまり適していません。上記の2つのロードには、独自の問題があります。
Resource:Resourcesフォルダーの中に置く必要があり、パッケージ化は少し処理しにくいです。
AssetDatabase:非同期ロード方法はなく、開発中に非同期ロードが必要な状況をシミュレートする方法はありません。

現在、プロジェクトにResourcesを使用しています。パッケージャーが2つのプロジェクトに分割し、APKプロジェクトにResourcesを除外し、単独のバージョンを作成してアップデート命令を管理しますが、それでも非常に面倒です。ほとんどの会社はAssetDatabaseを

元記事を表示

同期処理と非同期処理について

#はじめに
今回は[たった2日でマスターできるiPhoneアプリ開発集中講座](https://www.amazon.co.jp/SwiftUI%E5%AF%BE%E5%BF%9C-%E3%81%9F%E3%81%A3%E3%81%9F2%E6%97%A5%E3%81%A7%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%A7%E3%81%8D%E3%82%8BiPhone%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%9B%86%E4%B8%AD%E8%AC%9B%E5%BA%A7-Xcode-iOS-14%E5%AF%BE%E5%BF%9C/dp/4802612788/ref=monarch_sidesheet)という書籍の中に、[お菓子の虜Web API](https://sysbird.jp/toriko/webapi/)を利用したお菓子検索アプリを作るセクションがあったので、練習として作成してみました。
その際に、同期処理と非同期処理というワードが出てきて少し混乱したので、初学者の自分がこれ

元記事を表示

iPhone,iPadのppi対応表

#ppiとは

ppi(ピーピーアイ)とは、pixels per inchの略で、ディスプレイやビットマップ画像における解像度を示す単位である。別名画素密度 (pixel density) とも呼ばれる。

[ppi – Wikipedia](https://ja.wikipedia.org/wiki/Ppi)

あまりないとは思いますがレイアウトを物理サイズで何センチにしたいなどと言うとき機種によってppiを使用して計算します。

# 表

|機種名 |ppi          |
|:——————|:——————|
|iPhone 1st |163
|iPhone 3G |163
|iPhone 3GS |163
|iPhone 4 |326
|iPhone 4S |326
|iPhone 5 |326
|iPhone 5C |326
|iPhone 5S |326

元記事を表示

resultBuilderを使ってswift製の内部DSLを作ろう

## resultBuilderとは?
resultBuilderとはSwift5.4で新たに追加されたアトリビュートの一つです。

この機能を一言で説明すると**「内部DSLの生成補助ツール」**だと思います。
(上記は個人的な理解です。正確な定義はproposalや公式のドキュメントを参照お願いします。)

https://github.com/apple/swift-evolution/blob/main/proposals/0289-result-builders.md

## 内部DSLとは?

DSLとはドメイン固有言語の略称であり、特定のドメイン領域に特化した言語のことを意味します。
DSLにも2種類あり、プログライミング言語の書き方を工夫して見かけ上の構文を自然言語に近づけたものを内部DSL、汎用プログラミング言語とは全く別の構文を持ったものを外部DSLと呼ぶそうです。

### 内部DSLの例
内部DSLの例としてRubyのRspecが挙げられます。
RspecはRubyという言語を拡張したフレームワークですが、テストの記述という機能に特化して自然言語のようにテスト

元記事を表示

【SwiftUI】Appからのトラッキング要求

###メモ
・Appからのトラッキング要求は最初の実行時のみポップアップが表示される。
・再インストールなどすれば再びポップアップが表示
・設定のアプリへの権限許可?画面で設定変更も可能

トラッキングの許可を要求したいタイミングで”requestPermisson()”を実行
上記の通り、最初だけポップアップが表示され、以後表示されなくなる。

###コード
“`ContentView.swift
struct ContentView: View {

var body: some View {
Button(action: {
requestPermission()

}){
Text(“広告許可”)
}

//トラキング許可メソッド
func requestPermission() {
if #available(iOS 14, *) {
ATTrackingManager.requestTracking

元記事を表示

iOS アプリ開発で必要な証明書を openssl を使って作成

## ことの発端

もう、十数年こんな面倒なことやらせて開発者に負担を掛けるのを止めて欲しいが、iOSアプリを開発してると、そうも言ってられない例の “`モノ“` を作ります。[^1]

[^1]: 著者がヘソ曲げてますが、要は iOS 開発で必要になる証明書の作成を一通り記事にしたものです。

## 手順

“`Xcode“` で作ったり “`キーチェーンアクセス“` で作ったりする方法がありますが、どちらも、将来バージョンアップして使用方法が変わると面倒なので、 “`openssl“` を使います。(手数的にもそう大差ない気がします)

### 1. 秘密鍵を作成する

下記のコマンドを実行します。

“`sh
openssl genrsa -out private.key 2048
“`

“`private.key“` が生成されます。

### 2. CSR を作成する

下記のコマンドを実行します。

“`sh
openssl req -new -key private.key -out adc.csr

元記事を表示

Notion APIとFileMakerが良い化学反応を起こしそうな予感

Notion APIが公開され、普段使っているFileMakerとの連携に可能性を感じています。
Notionはチームで書き込むこともできますが、APIを使うことでNotionにログインしなくても外部からアクセスでき、入力フォームも用意することができます。

https://developers.notion.com/

##まずは今まで作ったものを見てください!

###My日報

###My本棚

#FileMakerとは
FileMakerはローコードの開発プラットフォームです。

FileMakerを使うと、このような社内システムを1人でも効率的に作ることができます。
[デイサービスで自社システムを作って楽をしています](https://qiita.com/gokkozemisei/items/79dd2e9a34fa06c67b

元記事を表示

iOS11~12台のSafariでは、landscape時かつアドレスバー展開時に下部に50pxのスクロール可能領域が発生する

##タイトル通り
about:blankのページを開き、html・body要素のheightに関わる数値を0pxに指定、`overflow: hidden;`とした状態であれど、タイトルのような現象が発生する。
ちなみに本記事はただの備忘録です。

##どうしたか

プロダクトの仕様上、

– `document.body.scrollHeight === innerHeight`でありたい
– `scroll`や`touchmove`の差し止めをすることはできなかった

という条件があったため、妥協の下

“`js:sample
const scrollPrevent = () => {
if (window.pageYOffset > 0) window.scrollTo(0, 0);
}
window.addEventListener(“touchend”, scrollPrevent);
“`
とした。

元記事を表示

【SwiftUI】No image named ” found in asset catalog for 〜〜 のエラー内容とその対応

No image named ” found in asset catalog for 〜〜というエラーをググると英語か古い記事しかヒットしなかったので、備忘録としてエラー内容と対応を記しておきます。

## 結論
アセット(画像)がない。ただそれだけ!英語の原文のままです。

もう少し書きます。
SwiftUIの場合、以下のようなコードで画像を描写することを宣言しますが、Assets.xcassetsに宣言されたアセットがないためタイトルにあるエラーが出るよって話でした。

“`swift
Image(“アセット名”)
“`

## 対応
Assets.xcassetsにアセット(画像とか)を登録してあげればよい。
タイポ起こりがちだから注意。

## 【余談】自分の場合は変数を使ってエラーになっていた
自分の場合はここに変数を代入していてエラーになっていた。
こんなかんじ↓

“`swift
@State var hoge = “”
Image(hoge)
“`

なので、以下のような対応で回避した。

“`swift
@State var hoge = “hog

元記事を表示

ファイル取得「UnityNativeFilePicker」でファイル選択時のイベントの取得について

Unityで開発を行っております。

iOSでファイル取得のために「yasirkula/UnityNativeFilePicker」プラグインを使用しています。
https://github.com/yasirkula/UnityNativeFilePicker

こちら非同期で動いておりますが、動画ファイル等サイズの大きいファイルを選択した際に、読み込み処理が行われているのかどうかがわからないので、
ファイル選択時のイベントの取得方法をご存じでしたら教えていただけないでしょうか。

USBより4BG近くの動画ファイルを選択した際など、転送時間が掛かるものに関しては読み込み中の表示を行いたいと考えております。

Unityは
Unity2020.3.1f1

を使用しております。

よろしくお願いします。

元記事を表示

iOSの設定アプリで日付と時刻の時間帯を変更すると、日付表示がおかしくなる問題の対応

# 概要
日付を表示するような画面は、iOS端末の時間帯設定によって日付がずれて表示される場合があるので、その対処法を説明します。

# まとめ
– Dateを日付として表示する際は、特定のタイムゾーンで表示したい場合は目的のタイムゾーンを設定しましょう。
– ISO8601タイムゾーンなし文字列からDateに変換する際はタイムゾーンが明示的に設定されるようにしましょう。

# 例
クーポンの有効期限を表示するアプリがあるとします。
この有効期限はWeb APIなどからISO8601の日付文字列を取得して、その内容を表示するものとします。
このクーポンは、日本時間の2021年7月31日23時59分59秒までが有効期限だとします。

## 通常表示
Web APIからは、`2021-07-31T23:59:59+09:00` という文字列が返ってきましたので、これをISO8601DateFormatterでDateに変換し、DateFormatterで文字列に変換します。
当初の思惑通り、有効期限は7月31日と表示されます。

7月31日

元記事を表示

【モバイル対応】URLでアプリを開く

# 背景
スマホのブラウザで閲覧するWebアプリケーションに配置されたボタンから
インスタグラムの**アプリ**に遷移する要件があった。
しかし、ただの https://www.instagram.com/ をhrefに設定しても、アプリには遷移されない場合があった。
そこで、どうしたらアプリが開くURLになるか調べた。

# URLでアプリを開く、とは
> 「入力されたURLを画面遷移の情報に変換し、その結果に従って画面遷移する」という処理が組み込まれているアプリに対して、URLを入力すること

引用:[「URLでアプリを開く」を丁寧に深堀りしていく](https://note.com/toridori_inc/n/nb7237a217a51)

それらは**ディープリンク**とも呼ばれている。
そして、そのディープリンクにはいくつか種類がある。

# Custom URL Scheme
今回の要件で必要なインスタグラム アプリへの遷移は
**Custom URL Scheme**が対応している。

これは、このディープリンクを踏むと、該当するアプリが端末にインストール

– されて

元記事を表示

たった数行のコードで作成できる iOS 15 の新たな SwiftUI の機能

– タスクを優先順位付きで作成し、タスクを実行し、タスクをキャンセルします。
– ユーザーが「集中モード」をオンにしたかどうかを把握する
– 位置情報ボタン
– (SwiftUI) SwiftUIを利用してリモート画像を読み込む
– (SwiftUI) `List`リストの検索機能
– (SwiftUI) リストセパレータを隠す
– (SwiftUI) リストにPull to Refresh(引っ張って更新)機能を追加
– (SwiftUI) テキストフィールドのフォーカスを外す
– (SwiftUI) リストセルにスワイプアクションを追加する
– (SwiftUI) テキストビューでマークダウンを使用する
– (SwiftUI) 画面が表示されたらタスクを実行します
– (SwiftUI) タブビューにバッジ(未読メッセージカウンター)を追加

この記事は `developer.apple.com` 上で公開されている文書に基づいて書かれました。スクリーンショットは後ほどこちらに追加します。

iOS 14の新機能に関して私が書いた別の記事もお読みいただけます。
[たった数行のコード

元記事を表示

天気図アプリを作成(SwiftUI)

#
気象庁発表の最新天気図のリンクをまとめたアプリをSwiftUIで作成しました。
iosアプリでは専門天気図が見れるアプリがありませんので、リンクするだけの単純なアプリですが
一部界隈に需要がありそうです。

![E2639146-F6D7-4EDF-83C4-45A1602988F8_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1261100/91e35156-e566-f68a-7fc8-f5dac0fa118d.jpeg)

>[天気図について 気象庁HP](https://www.jma.go.jp/jma/kishou/know/kurashi/tenkizu.html)

気象予報士、気象会社、航空機運航者、船舶運航者などが主な天気図の利用層になります。

#構成
TabView > NavigationView > List > Safari

天気図の種類をタブで切り替えして、`NavigationView`内に天気図リンクの入った`List`を並べます。

#w

元記事を表示

ExpoアプリにTracking Transparency を実装する

Expo のSDK 42が7月の初めに公開されました。じゃあ、ひとまずバージョン上げとくかと思って、SDKをバージョンアップしただけのものをApp Storeの審査に出したところ、リジェクトされました。

あれ???と思って、理由を見たら [App Tracking Transparency](https://developer.apple.com/documentation/apptrackingtransparency)を実装せよとのこと。iOS14.5以降では、アプリでトラッキングをするときにはユーザーの同意が必要とのことでした。確かに、最近いろんなアプリで同意画面を見たなあとは思ってました。

しかし、Expoはさすがというかもう用意されていました。TrackingTransparencyというのを使うだけですね。はい、expoコマンドでインストール。

“`shell
$ expo install expo-tracking-transparency
“`

実装もサンプルコードそのままインポート。

“`typescript
import { requestTrack

元記事を表示

[Unity]M5StickCとBLE通信(iOS実機/macOSエディタ

# Unity と M5StickC で BLE通信(iOS/macOSエディタ
* Unity の iOSアプリや、mac エディタで、M5StcikC や M5Stack などと Bluetooth Low Energy で通信する事ができました
* M5StickC から Unity に通知したり、Unity から M5StickC に書き込む事で、相互にデータを送受信する事が可能です
* 下の動画↓では、M5StickC のボタンを押すと Unity 内の数字が増え、Unity 内のボタンを押すと M5StickC の数値が増える事を確認できます

クロージャによるイベント通知パターン(備忘録)

##クロージャによるイベント通知
Swiftにおけるイベント通知パターンには3種類あり、その1つがクロージャによるイベント通知である。
クロージャを用いると、呼び出し元と同じ場所にコールバック処理を記述できるため、処理の流れを追いやすくなる。

しかし、複数のコールバック関数が必要な場合やコールバックの処理が複雑な場合はネストが深くなり可読性が下がる。

“`swift
final class SomeClosure {

private var num: Int = 0

func plus(completion: (Int) -> (Void)) {
num = 100
//処理の完了時の結果をクロージャに渡す
completion(num)
}
}

let someClosure = SomeClosure()

//処理の結果がnumに入る
someClosure.plus { (num) in
print(“Number is \(num)”)
}

“`

##どんなときに利用するべきか?

元記事を表示

OTHERカテゴリの最新記事