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

iOS関連のことを調べてみた2021年11月17日
目次

iPhoneで写真を撮ったらDropboxに自動保存されるようにする

IFTTTを使って、iPhoneで撮った写真が自動的にDropboxフォルダに保存される仕組みを作りました。

IFTTTのExploreの中にも「iPhoneのスクリーンショットをGoogle Driveに自動保存する」というものがあり、簡単に実装できるかと思ったら一手間必要だったので記事にしています。

#手順

https://ifttt.com/

こちら、IFTTTのサイトから新たなAppletを作ります。

上の「If This」で複数あるサービスから「iOS Photos」を選び、今回は背面カメラで撮った写真を自動保存するようにしたかったので「New photo with the rear camera」を選びました。

次に、「Then that」では、複数サービスから「Dropbox」を選び、「add file from URL」を選択。
ここで「Creat action」を選びAppletを作れば、iPhoneの背面カメラで撮った写真が自動的にDropboxに保存されるようになります。

#写真を開くには一手間が必要
しかし、実際にやってみると、Dropboxに新し

元記事を表示

「お前のアプリ、ク◯アプリ」に立ち向かい完全勝利した話

「お前のアプリ、ク◯アプリ」

毎日毎日悩んで考え抜いてやっとの思いで作ったアプリに対して、
こんな事言われたらとても悲しくなりますよね。

しかも、言った相手がアプリの承認権を持つ相手だったら、絶望しかありません。

AppStoreへのアプリの申請では、「お前のアプリ、ク◯アプリ」と言われるのと同等のリジェクト理由が存在します。
それが、**Guideline 4.2 – Design – Minimum Functionality**です。

本記事では、Minimum Functionalityでリジェクトされた際の解消法を、
経験談ベースで記載します。

結論を先に述べると、
大事なのは、**なぜMinimum Functionalityかを考えること**です。

##「ク◯アプリ」との戦いの記録

###申請したアプリ
今回申請したアプリはこちらです。

twitter_ja.001.jpegApple WatchでSafariブラウザ相当の機能を使う方法(ショートカットアプリ経由)

# はじめに

Apple Watchでブラウザが使えたらなぁ・・・。
iOS14の時はショートカットアプリを使えば出来ていたのだけど、iOS15にバージョンアップして使えなくなっていて諦めていました。
でもきちんとショートカットの内容を確認したら、出来るようになりました。

# 動作環境

– iPhone8 Plus
– iOS15.1
– Apple Watch Series 6
– WatchOS 8.1(19R570)

# 期待する結果

実用性は微妙ですが、Apple Watchでブラウザが使えます。
ショートカットアプリ経由でですが、ちょっとした確認がスマホを取り出さなくても出来るのは、良いことですよね。

![E970CC1D-C7BC-4919-903F-AAF6E01D95F8_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150734/26b7ae4c-5c3d-d0b1-c186-06c85343bd0a.jpeg)

# 実験内容

ショートカット

元記事を表示

Azure AD による モバイルアプリのデバイス証明書認証の実現方法

#はじめに

本記事では、モバイルアプリ(iOS または Android ネイティブアプリ)の証明書認証連携時の注意点とその対応方法をご説明いたします。

現在、大変多くの モバイル SaaS アプリケーションが Apple AppStore や Google Play ストアから提供されており、その中にはビジネスアプリも多数存在しています。ビジネスアプリを企業で利用する場合、セキュリティを考慮する必要があり、組織で管理されたデバイスのみに利用を制限することが多くの企業で求められます。このデバイス制限のセキュリティポリシーの実現方法として Azure Active Directory (Azure AD)の条件付きアクセスポリシーがあります。Microsoft Intune(Microsoft Endpoint Manager)で管理された準拠デバイスのみ SaaS アプリのアクセスを許可することが可能です。しかしながらこの方法を **Microsoft(Office 365アプリ等) 以外のモバイルアプリで実施する場合、注意点があります**。
※ちなみに、Microsoft のモバ

元記事を表示

不足しているオプションの dSYM をアップロードする(iOS)(Firebase)

# 不足しているオプションのdSYMをアップロードする

## はじめに
自分は「dSYMをアップロードする」で警告が出て失敗したのでこの記事を書いています。
Firebaseのドキュメントに詳しい内容は載っていますので、他に気になることがあるときはドキュメントをご覧ください。
[Firebase Crashlytics SDK を使用して難読化解除されたクラッシュ レポートを取得する](https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=ios&authuser=0)

## 失敗原因
ドキュメントからコピペしたコードを使用してターミナルを操作したため、失敗した。
フォントが違っていたっぽい。

## 解決方法
ファイルをドラッグアンドドロップで絶対パスを入力
オプションはしっかりキーボードで入力
で解決できました。

## dSYM を見つける
dSYMを見つける方法として二つの方法があります。
1. App Store からビットコードの dSYM をダウンロードする
2.

元記事を表示

UICollectionView(Section有)のDrag&Dropについて

UICollectionViewのCellをDrag&Dropで動かした方法(Sectionまたぎ有)についてまとめておきます。
イメージとしてはiOSのホーム画面でAppの配置を動かすようなものです。
UITableViewについては割に資料があったのですが、CollectionViewについては「同じように・・・」と端折られてることが多く、色々調べて試しながら進みました。

## 環境
Xcode 13.1
Swift 5.5.1
Target 13.4

## まずは静的なCollectionViewをつくる

##### View Controller > View の上に、Collection Viewを配置
`Section Header`をSB上で表示するには `Attributes Inspector` >

元記事を表示

【無料】Android, iOS を自動判定するURLリンク(QRコード)を作る。OS別のサイトに飛ばす。

一つのリンクで、OS判定して、

* iOS
* AppStoreリンクへ。
* Android
* GooglePlayリンクへ。
* 他OS(Windows,Mac OSなど)
* 公式サイトリンクへ。

飛ぶようなリンク(もっと言えばQRコード)が欲しい!
とのことで、「無料」で制作してみました。

こんな感じです。
https://games.kaedeee.com

QRはこれ

![qr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1900756/c799fd06-5b22-92dc-decf-7acf921630d0.png)

ちなみに、既にあるツールとして、4つご紹介しますが、個人開発者としては、どれも一長一短という感じ。
お先にその4つをご紹介いたします。
#既存ツール

#One Link
https://onelink.to

![スクリーンショット 2021-11-16 12.55.17.png](https://qiita-image-store

元記事を表示

【iOS】simulatorで+(プラス)を入力する。

`Shift + ^`

シミュレータでメールアドレスのエイリアス用のプラスを打ちたかった際に見つけられず
キーボードを片っ端から打って見つけました。

@(アットマーク)はこちら。

https://qiita.com/Kyohei_s/items/7f4e15440e74c7f6afda

元記事を表示

SwiftでISO8601形式の期間の文字列表現を扱う

SwiftでISO8601形式の期間の文字列表現を扱います。

# ISO8601形式の期間
ISO8601では期間を示す形式の文字列が存在します。
https://ja.wikipedia.org/wiki/ISO_8601#期間

次のような文字列は、2021年10月1日12時から2021年12月31日15時の期間を示す文字列になります。
`2021-10-01T12:00:00+09:00/2021-12-31T15:00:00+09:00`

これを、Swiftで扱えるようにします。

# DateIntervalに変換する
FoundationにDateIntervalというクラスが含まれます。

https://developer.apple.com/documentation/foundation/dateinterval

これはstartからendまでの特定の期間を示すクラスです。
このクラスには`contains`などの便利なfunctionがあり、特定の日付が期間に含まれているかを簡単に調べることができます。
ですので、期間文字列をDateIntervalに変換す

元記事を表示

iOSで「拡大表示」の設定を行うとUIScreen.main.boundsのサイズが変わる

## TL;DR

– 「拡大表示」設定を行うと論理的な解像度( `UIScreen.main.bounds` )が一段階小さくなる
– iPhone 8は320×568になる
– 「拡大表示」設定になっていても `UIScreen.nativeBounds.width / UIScreen.main.scale` で拡大表示ではないときの解像度と同じ画面幅を取得できる

| Device | bounds.width | nativeBounds.width | scale | nativeScale |
|:-:|:-:|:-:|:-:|:-:|
| 8 | 375 | 750 | 2 | 2 |
| 8(拡大) | 320 | 750 | 2 | 2.34375 |
| 13 Pro | 390 | 1170 | 3 | 3 |
| 13 Pro(拡大) | 320 | 1170 | 3 | 3.65625 |
| 13 Pro Max | 428 | 1284 | 3 | 3 |
| 13 Pro Max(拡大) | 375 | 1170 | 3 | 3.424 |

元記事を表示

【iOS】simulatorで@(アットマーク)を入力する。

`Shift + 2`

よく忘れるので忘備録です。

以下未確認ですが、キーボードの配列や言語によって更に変化するそうです。
上記でも変化なければお試しください。

`alt+shift+2`
`alt-G`

https://stackoverflow.com/questions/21477516/in-iphone-simulator-how-to-type-the-sign-on-a-macbook-with-german-keyboard

元記事を表示

Firebaseでやたらと再認証が要求される件

Qitta初投稿になります。モバイルエンジニアのEtsuwoです。

Firebase便利ですよね。
特にログイン周りを一挙に任せられる点がとても優秀だなーと感じています。
しかし、もうちょっと融通効かないかなーとか思ってしまう点もあります。
その代表が「再認証」がやたらと要求される点だと思っています。
セキュリティ的に仕方ないのかもしれませんが、しっかり考慮しないと普通に欠陥サービスになってしまうと間違いなしだと思うので記事にします。

# 再認証とは
Firebaseではセキュリティ的に重要な操作を行う際、最後の認証から一定時間以上経過していると「再認証」が求められます。
「本当にこの操作行って良いのか」or「本当に本人なのか」確認するためにもう一回ログインしろよってことですね。
再認証は最後の認証から**5分以上**経過している場合に、以下の処理を行う時に必要になります。

– メールアドレスの変更
– メールを使用しないパスワードの変更
– ユーザアカウントの削除

最後の認証から5分以上経過して以上の処理を行うと、`FIRAuthErrorCodeRequiresRecent

元記事を表示

Unity iOSビルド時に輸出コンプライアンス情報をinfo.plistに記載する

以下のスクリプトを適当な`Editor/`下に配置の上ビルドすると、
TestFlightアップロード時に輸出コンプライアンス情報を提出する必要がなくなる。

“` CSharp
using System.IO;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.iOS.Xcode;

public class PostprocessBuild : IPostprocessBuildWithReport
{
public int callbackOrder { get { return 0; } }

public void OnPostprocessBuild(BuildReport report)
{
if (report.summary.platform == BuildTarget.iOS)
{
string plistPath = Path.Combin

元記事を表示

iOSのAudioSessionを理解するのに役立ったサイト5選

仕事でiOSのAudioSessionについていろいろ調べる機会がありまして、その際に役になったサイト様を紹介します。

# AppleDeveloper(公式)

– https://developer.apple.com/documentation/avfaudio/avaudiosession
– https://developer.apple.com/documentation/avfaudio/avaudiosession/mode
– https://developer.apple.com/documentation/avfaudio/avaudiosession/category

まずは公式を抑えておきましょう。

# iOSアプリ開発 入門 (6) – AVAudioSession

– https://note.com/npaka/n/nfaf451311d56

AudioSessionについての説明と扱い方のとてもわかりやすい説明がされています。入門記事としておすすめです。

# iOS Apps Developer’s Note

– https://moz

元記事を表示

SwiftPMのpreviewでBundle.moduleにアクセスしてクラッシュした話

# 概要

* Swift Package Manager の Preview で Bundle.module にアクセスしてクラッシュした状況と、手元の環境で解決できた方法の話です

## 環境
* Xcode 13.1
* macOS 11.3.1

# 何があったのか?

* SwiftPM を使って AppMain と Assets のターゲットを作成しました
* Assets の Resources の中に、Assets.xcassets を配置し、`aka` の Color Set を追加しました
* [SwiftGen](https://github.com/SwiftGen/SwiftGen)を利用して、`Asset.aka.color` で追加した `aka` にアクセスできるようにしました
* AppMain 内の preview で、`Asset.aka.color` を使って View を表示させようとしました

![スクリーンショット 2021-11-13 22.05.42.png](https://qiita-image-store.s3.ap-northe

元記事を表示

[Flutter] CodeMagic で自動で build_number を更新できない時の対処法。build number が更新されない。 –build-number=$(($BUILD_NUMBER))

https://kaedeee.com/flutter-codemagic-build_number/

CodemagicでFlutterを利用する際に、Github にデプロイ後、自動でbuild numberを更新するように設定したにも関わらず、iOSで自動更新が反映されませんでした。

対応を以下に示します。

#対処法

##Codemagicの設定を見直す。
build > build arguments を

–build-number=$(($BUILD_NUMBER))

と設定する。

![スクリーンショット 2021-11-12 17.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1900756/24fd56ef-c082-f3d8-b787-83342dcb7035.png)

##Xcodeの設定を見直す。
Xcode > Info.plist より、

key CFBundleShortVersionString
key CFBundleVersion
部分の

元記事を表示

SwiftでMoyaを使う

Moyaを使用して簡単な参考ソースコードを作成します。
今回は下記URLのAPIを例として使用しました。
https://www.themoviedb.org/
人気映画、映画の詳細、検索などが利用できるAPIです。

# Moyaとは
Moyaはネットワーク抽象化レイヤーです。
MoyaはAlamofireを使用しており、ネットワークマネージャーを素早くセットアップできます。
必要な依存関係を追加することで、プロジェクトでMoyaを使用することができます。
プロジェクトをインストールする方法はいくつかあり、下記リンクにインストールに関する詳細が入手できます。
https://github.com/Moya/Moya#installation

# API
Moyaをインストールしたら、まずAPI.swiftファイルを作成し、さまざまなリクエストをもつ列挙型(enum)を作成します。
API列挙型をMoyaのTargetTypeで拡張し、必要な変数に準拠する必要があります。
baseURL, path, sampleData, taskやheaderなどです。

“`
import

元記事を表示

[Swift]CLLocationManagerDelegateをDataStoreへ格納してみた

## 投稿の経緯
iOSアプリ開発でFat ViewControllerはよく知られたアンチパターンです。特にTableViewDelegateやCLLocationManagerDelegateなどのDelegateメソッドをViewControllerに書くことでFatになる印象です。
今回はそんなFat ViewControllerを回避するため、CLLocationManagerDelegateをDataStoreへ格納してみようと思います。
[GitHub Repositoryはコチラ](https://github.com/ken-sasaki-222/LocationManagerInDataStore)

## 環境
Swift 5.5
Xcode 13.1

## UIの使用
– 初回ボタンタップで位置情報アラート表示(`requestWhenInUse`)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/dfb22798-d21a-69bf-4455-e9

元記事を表示

スマホを振って、ピア通信で友だちとプロフィールを交換する【MultipeerConnectivity】【iOS】

**サーバーなしでデバイスだけで直接で通信できます。**

#ピア通信に必要な最小手順

###

この手順で他のデバイスとデータの送受信ができます。

###1、Local Network (Bonjour services)をアプリに追加
Info.plistにLocal Network Usage DescriprtionとBonjour servicesを追加します。

![スクリーンショット 2021-05-27 4.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/6102bd5b-c67d-df37-c7db-e2481808d4f0.png)

Info.plist のBonjour services に自分のサービ

元記事を表示

iOSで発話認識する最小構成

#iPhoneで発話認識するの手順

ユーザーの発話内容を認識する最小構成です。
本記事のコードをベタ貼りしていけば音声取得してテキストにするまでができます。

[**【参考画像:音声認識を用いたサンプルアプリ(RealityKit-Sampler)】**](https://qiita.com/john-rocky/items/48f95f814b12dd7c853d)
[ ](https://qiita.com/john-rocky/items/48f95f814b12dd7c853

元記事を表示

OTHERカテゴリの最新記事