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

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

[iOS]SwiftでLocalizable.stringsを動的に差し替える

# Swift で Localizable.strings を動的に差し替える
* 特に多言語対応しているiOSアプリでは、`Localizable.strings` を使ってアプリ内の文字列を管理している場合が多いと思います
* 私が作っているアプリでは、SwiftPM で作ったリソース用のモジュールがあり、`Bundle.module.localizedString` を使ってバンドルした文字列を取り出しています
* この方法では、翻訳データを更新するためには、アプリを再度ビルドする必要があります
* そこで、**動的に `Localizable.strings` を差し替える**仕組みを作ってみました

# うまくいったやり方
* 実際に作成したコードはこちらです
* 文字列データは、`DynamicLocalize.localizedString` を使って取り出します

“`swift
public class DynamicLocalize {
internal static func localizedString(_ key: String, _ table:

元記事を表示

SwiftUIでのプレビューをより便利にする

# 概要

よく使うSwiftUIのプレビュー機能は実装を共通化しておくと便利です。
本記事では一例として以下の実装例を紹介します。

– BoolPreview|Bool値のプレビュー
– ColorSchemePreview|外観モードのプレビュー
– LocalizedPreview|ローカライズ言語のプレビュー

## BoolPreview

**利用例**

ViewのもつBool値の状態を切り替えてプレビューします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113553/ac65eb77-3c39-fe2c-52a0-26b7af0820be.png)

こんなふうに入れ子にして利用するのも便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113553/41138ab0-f715-d23e-23a0-0ef3f5f4fd46.png)

**実装**

元記事を表示

【Combine】dropFirst(_:) オペレータを理解する

Combineを真面目に勉強しようと思い立った今年です。
というわけで、早速1つ目の記事を書こうと思います。

Combine自体への興味はもちろん大きいのですが、
これを学習することでリアクティブプログラミングへの理解を深めたいという目的もあります。

早速ですが、本題に入るにあたり少し前置きをさせてください。:pray:

学習する上で、「Combineをはじめよう」という宇佐美さんが書かれた本をよく読ませていただいています。
その本の中にこんな文章があります。

> プログラマであれば、言葉であれこれ説明する前に、実際にコードを書いて動かしてみるのが理解が早いだろうと考えています。

私はその考えに則ったこの本の構成が非常に好みで、頭にすっと入ってきました。
なので、この記事でもそれを真似させていただきながら書いていこうと思います。

Combineについて書く初めての記事なので、多少前置きが多いですが、
次回からは省略します。

## 環境

【Xcode】13.1
【Swift】5.5
【macOS】Big Sur バージョン 11.4

## 公式ドキュメントから理解する

元記事を表示

リモートでiOS開発(Xcode)をTeamsの遠隔操作を使ってペアプロする

リモート作業でiOSアプリ開発のペアプログラミングをする環境をご紹介します。

# 環境
リモート作業, iOSアプリ開発, Mac, Xcode, Teams

# 手順
1. (ドライバが)Teamsで画面共有をしておく
1. (ドライバが)Xcodeで実装を進める
1. (お互い)同じ画面を見ながらペアプログラミングをする
1. (ナビゲータが画面操作したい時は)Teams画面上部の「制御を要求する」をクリックし、ドライバの画面操作権限を要求する
1. (ドライバが)画面上部の「許可」をクリックすれば、ナビゲータが遠隔操作可能となる
1. (ナビゲータが)ドライバの画面を直接操作する

Teamsの使い方は以下の記事がわかりやすいです。
[Teamsの画面共有の使い方と、共有画面を遠隔操作する方法を解説 | WEB会議DEどうでしょう](https://webmtg-dodesho.com/teams-screen-sharing/)

# 役割

## ナビゲータの役割

以下の解説がとてもわかりやすいので転記させていただきます。
[ペアプログラミングのやり方 – Qiit

元記事を表示

Xcode でテストにタイムアウトを設定する

## 概要

Swift 5.5 で入った Concurrency を使ったテストで、`await` 時に想定外のことが起きて結果が返ってこずテストが永遠に終わらないということが起こったので、テストにタイムアウトを設定する方法を調べてまとめました。

動作検証はすべて Xcode 13.2.1 で行いました。

## TestPlan を設定する

まず、タイムアウトを設定するために TestPlan を有効にします。タイムアウトの設定のみであればビルド時に特定のコマンドラインオプションを渡すことでも可能なようですが、細かく設定しようと思うと TestPlan を作ってしまった方が便利なのでそちらの方法をとることにします。

Xcode の window 上部の Scheme をクリックして `Edit Scheme…` から `Test` の `Info` タブを開きます。右下の方に `Convert to use Test Plans…` というボタンがあるのでこれをクリックします。

![image.png](https://qiita-image-store.s3.ap

元記事を表示

別のFirebaseプロジェクトにアクセスしたい場合

# この記事を書いた理由

大体のアプリではクラッシュログとかを拾うためにFirebaseを組み込んでいるアプリが多いと思います。その場合は通常アプリ=Firebaseプロジェクトとなっていますが、例えば他のアプリとデータを共有したいとか別のFirebaseのプロジェクトにアクセスしたい場合が発生したので、共有のために貼っておきます。

ニーズが少ないのかあまり情報がなかったので、ちょっと苦労しました。と言っても数時間ではありますが。

# やり方

今回は事情があってObjective-Cのコードですが、Swiftの人は置き換えてみてください。

流れとしては、別のプロジェクトを指定するためには、GoogleService-Info.plistをまるっと使います。「OtherApp.plist」とでもリネームしてプロジェクトに取り込んでください。

そして、「OtherApp.plist」へのファイルパスを指定して、FIRAppのインスタンスを作成します。
こんな感じです。

“`objectivec
@property (nonatomic, retain) FIRAuth *a

元記事を表示

【iOS】新型コロナ(COVID19)についてのアプリは作ってはいけないって話

今年の年末年始にアプリを作ってAppStoreに公開しようとしたら見事に玉砕したので供養として、またiOSアプリ開発ビギナーが同じ目にあって欲しくないと思い、投稿します。

# はじめに
今年の年末年始に新型コロナウイルスについての簡単なアプリを作りました。どのようなアプリかというと、累計感染者数と重症者数、死亡者数等を画面に表示。体調管理や都道府県ごとの感染者数を調べてみることができるというアプリでした。
作成後、AppStoreに提出。次の日にAppStoreConnectで確認するとリジェクトされていました。
![スクリーンショット 2022-01-15 17.16.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/4f09951a-7da1-5a5f-3f32-67f3a0417100.png)

# リジェクトとその内容
リジェクトされるのは、よくあること(?)なので特に驚きはしませんでした。なんなら、「お!やっぱ来たか」くらい。

問題はその内容

>We found in

元記事を表示

【iOS × アーキテクチャ】iOSにおける、GUI/システムアーキテクチャとは?

# 目的
`GUIアーキテクチャ` `システムアーキテクチャ` についてまとめること

# 流れ
0. そもそも、アーキテクチャ とは?
1. GUIアーキテクチャ の例
2. GUIアーキテクチャ とは?
3. システムアーキテクチャ の例
4. システムアーキテクチャ とは?
5. モバイルアプリ開発における問題点
6. 5を解決するアーキテクチャ

# 0. そもそも、アーキテクチャ とは?
**アプリケーションを開発する上で、開発者同士の共通認識を行うためのもの**

開発者同士の共通認識とは?
→ 3つある

① : クラスなどの要素の関係性整理
② : 伝達順序の整理
③ : 開発の規則性

**根幹にあるものは?**
`Presentation Domain Separation : プレゼンテーション領域の分離 ` という考え。
「システム本来の関心領域(ドメイン)を、UI(プレゼンテーション)から引き離す」 ということ。
`プレゼンテーション( =View )`, `ドメイン( =Model )` を分けて考えましょうね。 というもの。
※ プレゼンテー

元記事を表示

SwiftUIで画面遷移を実装する

## 環境
Xcode13.2.1
Swift 5.5.2

##基本的な画面遷移方法
**1. NavigationLink**
**2. sheet**
**3. フラグによるViewの切り替え**

#1. NavigationLink
NavigationLinkはiOSの基本的なpush遷移になります。
以下のように実装します。

“`swift
NavigationLink(destination: 遷移先のView) {
任意のView(このViewをタップすると遷移先に指定したViewに遷移する)
}
“`

##実装例
### Viewのタップで遷移する方法
NavigationLinkの末尾のクロージャに追加したViewをタップすることで遷移するやり方です。
追加したViewは最初からタップ可能になっています。

“`swift
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destina

元記事を表示

【iPhone】一定秒数で切り替わる壁紙スライドショーをつくる【ショートカット】

# 本当に普通の壁紙スライドショー
この記事は**普通の壁紙スライドショー**を探していた**iPhoneユーザ**に向けられたものです。_iPhone 壁紙 スライドショー_ とググったときに散見される、オートメーションを利用した擬似的な仕組みではありません。タイムアウトと再帰処理を利用しただけの**本当に普通の壁紙スライドショー**です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2167550/87675bd0-9254-6247-1ba0-a159a8f6967f.png)
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2167550/04b9844c-21ac-bbff-afe2-92674fccb760.png)