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

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

Firestoreでcountの集計がとれるようになっていたのでiOSで実装してみた

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[@mogmet](https://twitter.com/mogmet)です。
![mogmet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/8d49d5b8-5312-bf3c-856f-c3cf02901f69.jpeg)
一昔前の聖地巡礼したときの写真がgoogleにサジェストされました。あの花はとても名作なので是非みてない人は見てください。

本日はmonoさんが衝撃な機能をツイートしていたので実際に試してみた記事になります。(monoさん素敵な情報ツイートありがとうございますー!!)

というわけで、Firebase

元記事を表示

AppStoreのios証明書の更新について

# 概要
iOS Distribution Certificate証明書は一年に一度更新する必要がある。
更新しなければ、新しいアプリケーションやアップデート版を App Store に提出することはできなくなる。

# 対応方法
以下のリンクを参考にしました
[【iOS】 Certificate証明書の更新 (現在ご利用のiOS Distribution証明書の有効期限まであと30日になりました。](https://marumaro7.hatenablog.com/entry/certificateupdate)

[[iOS] Appストアに公開したアプリの証明書の有効期限が切れたらどうなるか](https://b.0218.jp/20160905143643.html)

元記事を表示

ONLYOFFICE DocumentsのiOS版 v7.2の紹介:手書き認識、文書保護、検索フィルターなど

皆さまに朗報です。

[ONLYOFFICE DocumentsのiOS版](http://www.onlyoffice.com/office-for-ios.aspx?utm_source=blog&utm_medium=article&utm_campaign=onlyoffice_documents_7.2)の最新版がリリースされました!手書き文字認識、文書保護、検索フィルター、編集ウィンドウの再設計など、多くの新機能と改良が加えられています。詳細はこの記事をご覧ください。

Meet ONLYOFFICE Documents v7.2 for iOS: handwriting recognition, document protection, search filters and more

## 手書き文字認識

ONLYOFFICE DocumentsのiOS版は、バージョン7.2より、Appleデバイス上で手書き文字を入力したテキストに変換することができるようになりました。Apple Pencilで入力した内容をアプリが自動的に認識し、文書に挿入するため、キーボードを使用

元記事を表示

【Swift】LaunchScreenでカスタムフォントが使えない

# 問題
ビルド時にカスタムフォントが適用されない

|Xcode上での表示|ビルド時の表示|
|-|-|
|![スクリーンショット 2022-10-11 14.53.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4522208f-ad72-1c4b-226f-30e36ca8e3d7.png)|![Simulator Screen Shot – iPhone 12 – 2022-10-11 at 14.52.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b1201e8e-373b-32ed-73c3-cb7eaa8f6972.png)|

# 原因
起動時点ではカスタムフォントの読み込みが終わっていないので設定できてない(たぶん)

# 解決方法(仮)
画像で配置する

# おわり
もっと良い方法があればコメントで教えていただけると嬉しいです。

元記事を表示

モバイルアプリの自動テストツールShiratesを使ってみよう

本記事は自動テストツールShirates(シラテス)の紹介記事です。※はてなブログからの転載です。

# モバイルアプリのテストの自動化

昨今、ソフトウェアテストの自動化がますます重要になっています。モバイルアプリも例外ではありません。自動化を実現するツールには有償・無償のものが多数存在します。無償のもので注目されている製品としてはAppiumがあります。筆者もAppiumを導入して使用しましたが、とてもハードルが高いという感想です。はっきり言って、茨の道です。ちゃんと使ってテストの実務で成果を出せるようになるにはある程度の期間修行が必要です。開発スキルを持ったエンジニアでも苦労するのですから、もっと導入や使用方法が簡単でないとテストエンジニアに広く普及させるのは難しいと考えています。

# Shiratesとは

Shiratesはそのような敷居の高さを少し下げてくれるOSSのツールです。GitHubから入手できます。

https://github.com/ldi-github/shirates-core/blob/main/doc/markdown/index.md

元記事を表示

【Swift】公式ドキュメントのIteratorProtocolを読む

# この記事は何?
SwiftのIteratorProtocolについて調べました。
主に、[開発者ドキュメント](https://developer.apple.com/documentation/swift/iteratorprotocol)
より翻訳した内容になります。

# Declaration
宣言

“`swift
protocol IteratorProtocol
“`

# Overview
概要

Swiftにおいて、「連続して、値を一つずつ取り出せるデータ構造」を**シーケンス**といいます。
`Sequence`プロトコルに適合する型のインスタンスは`for-in`ループを使って、要素ごとに処理を反復できます。
その際、シーケンスに対して「一つずつ値を取り出す役割」を果たすインスタンスが**イテレータ**です。
インスタンスの型が`IteratorProtocol`プロトコルに適合する場合、`makeIterator()`メソッドでイテレータを取得できます。

`IteratorProtocol`プロトコルは`Sequence`プロトコル

元記事を表示

【Swift】SnapKitの制約まとめ

## 中央
“`swift
// 「label」を画面の中央に配置
label.snp.makeConstraints { make in
make.center.equalToSuperview()
}
“`
![スクリーンショット 2022-10-10 22.31.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/85aeb26d-674b-833a-19ce-ee0bbf2339e7.png)

## X中央
“`swift
// 「label」をXの中央に配置
label.snp.makeConstraints { make in
make.centerX.equalToSuperview()
}
“`
![スクリーンショット 2022-10-10 22.32.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1dd239fa-34dd-807f-99

元記事を表示

Cordovaアプリ開発の備忘録(プラグイン編)

前回の投稿では、Cordovaアプリの基本的な開発手順についてまとめました。
今回は、プラグインの開発手順についてまとめようと思います。

Plugin Development Guide

https://cordova.apache.org/docs/en/11.x/guide/hybrid/plugins/index.html

# プラグイン名を決める

まずは、プラグイン名を決めましょう。
今回は適当に「sampleplugin」とでもしておきましょうか。

フォルダ名は、慣例があり、「cordova-plugin-sampleplugin」となります。

“`
> mkdir cordova-plugin-sampleplugin
> cd cordova-plugin-sampleplugin
“`

# plugin.xmlを作成

“`xml:cordova-plugin-sampleplugin/plugin.xml
WindowsでiPhoneのデベロッパモードを有効にする方法

# iOS16からデベロッパモードが導入
iOS16からiPhoneで開発する際には「デベロッパモード」を有効にする必要があります。
https://qiita.com/YokohamaHori/items/d00e1786c34b4ab30638

### iOS16βではデフォルトで「設定」にデベロッパモードの項目が表示されていますが、製品版では表示されなくなったようです。

原則としてMac(XCode入り)につないで項目を表示させてから、ONにする必要があります。
(↑ この部分で何らかの命令を飛ばしている?)

## Windowsのみでデベロッパモードを有効にする

通常はiPhoneの開発をするのにMacがないなんて考えられないのですが、なんやかんやあって、WindowsのみでデベロッパモードをONにする必要が生じました。

iOSデバイス用のオープンソースライブラリである[libimobiledevice](https://github.com/libimobiledevice/libimobiledevice)では、対応してそうなissueがありますが、windows

元記事を表示

Cordovaアプリ開発の備忘録

スマホアプリのアプリ開発にCordovaを使っています。サーバサイドはNode.js、ブラウザアプリはJavascriptを使っているので、スマホのネイティブアプリの開発もJavascriptで開発できるのは新言語を覚える必要がなく、Javascriptに専念できるので魅力的です。
さらに、iOSやAndroidの両方のネイティブアプリを1つのコードで動作できるのはありがたいです。

Cordova

https://cordova.apache.org/

今回は、Cordovaアプリを開発・デバッグするための方法や、OS独自の機能を実装できるプラグインの開発方法についてまとめておきます。いろんな開発をやっていると、Cordovaの開発方法を結構忘れがちになるので、備忘録として残しています。

# Cordovaのインストール

Node.jsがインストールされている前提です。
以下を実行すれば完了です。

“`
> npm install cordova -g
“`

また、開発する対象のスマホOSごとにコンパイル環境のインストールが必要です。

[Androidの場合]
An

元記事を表示

AWS AmplifyでコンテナREST APIをデプロイしiOSアプリと通信する

# はじめに
AWS Amplifyを用いることでバックエンドの構成をほぼ意識することなくAPI, 認証、データベースなどをAWS環境に構築し、フロントエンドアプリケーションから呼び出すことができます。
REST APIを作成すると、Amazon API GatewayとAWS Lambdaを用いたイベント駆動型の環境を構築できます。ですが、ユースケースによってはイベント駆動ではなく、常駐型のサーバが適切な場合もあるかと思います。
AWS Amplifyではプロジェクト設定を変更することで、このようなケースにコンテナを用いて対応することができます。

今回は、AWS Amplifyを用いてコンテナREST APIをデプロイし、iOSアプリと通信したいと思います。

# 環境
Amplify CLI: v10.0.0
Xcode: v14.0.1

# 手順
1. Xcodeプロジェクトを作成します。
2. Xcodeプロジェクトディレクトリ直下でAmplify CLIを用いて `amplify init` でAmplify プロジェクトを初期化します。
3. Amplify CLIを用

元記事を表示

【Swift】まとめてアンラップする

# はじめに
`if let`や`guard`をまとめられるのを知らなかったので記録しておきます。

# if let
“`swift
let int: Int? = 10

let string: String? = “hello world”

if let int, let string {
print(int)
print(string)
}
“`
:::note info
**ポイント**
“`swift
if let int = int, let string = string
“`

“`swift
if let int, let string
“`
は同じ意味
:::

# guard
“`swift
let int: Int? = 10

let string: String? = “hello world”

guard let int = int, let string = string else { return }

print(int)
print(string)
“`
:::note info
**ポイント**
“`sw

元記事を表示

【SwiftUI】文字色を背景色の反対色にする

# はじめに
背景色が動的に変更されるアプリだと背景色と同化して文字が見えなくなる問題が発生します。
そんな問題を発生させないメソッドを見つけたので紹介します。

# サンプルアプリ
![Simulator Screen Recording – iPhone 14 Pro – 2022-10-08 at 20.36.58.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f427e221-883d-99a1-9251-87b45c1e077f.gif)

# 実装
“`diff_swift
import SwiftUI

struct ContentView: View {
@State var percentage: CGFloat = 100
var body: some View {

VStack(alignment: .center) {

batteryShape.overlay(batteryText)

元記事を表示

iOSアプリ設計パターン入門(第2章:設定パターンを適用する前に)

# 概要
「責務」「パターン」「設計の原則」の3つを中心に設計プロセスについて説明しており、設計パターンをする前にSwiftにおけるプログラミングの作法を中心に説明している。

# まとめ
「責務」「パターン」「設計の原則」の3つを中心に設計プロセスについて説明してくれている。

# 学び
・責務とは、解決すべき問題の領域のことで、モジュールに責務をまとめて置いている。
・責務分離が適切に行われた状態は、モジュール内で責務がまとまっており高凝集といい、モジュール同士では責務が分かれている疎結合状態という。
・あるモジュールの責務は、他のモジュールとは分離されているはずでありその境界線を崩してしまうと、重大なエラーを発生させてしまう可能性もある。
・Apple公式によるUIViewControllerの役割は、以下の4点である。
①データの変化に応じてViewsの内容を更新②ユーザーインタラクションへの反応③レイアウトの管理④他のオブジェクトとの連携
・関数や変数を命名する際には、「ユーザーがそこ関数の挙動を行うと、どのような処理を動くのか」を考えて命名すると他のメンバーも関数や変数に関

元記事を表示

iOSアプリ設計パターン入門(第1章:設計するということ)

# 概要
本書の本質的な部分を説明する前に、「iOSエンジニアとして設計するということ」の意義を簡単にまとめてくれている。昨今、iOSの開発環境が進化し、アプリ自身も成長している中で、膨大なコードをどのように書くのかを考えた上で開発しなければ、複雑にコードが絡み合い非効率になる。
そのため、そもそもなぜ設計を学ぶ必要があるかを説明してくれていた。

# まとめ
アプリの持つ複雑な問題を「関心の分離」によって小さな問題へと切り分けるといる、そのことを設計するという行為で、そのための武器がパターンである。

# 学び
・iOSアプリの開発事情「アプリでできることが増えた」「頻繁・継続的なリリース」「アプリの大規模化」「プロジェクトの長期化」「チーム開発での分業化」が挙げられる。
・関心の分離とは、アプリ開発における解決するべき問題(実装したいこと)をできる限り小さな単位で分けてコードを管理すること
・設計パターンは、複雑な問題をより簡単な問題群として切り分けるために活用できるもので、再現性のある問題に対する共通の解決策のこと
・パターンを知るメリットは、「問題を定型化して捉えられる」「解決

元記事を表示

【Swift】上がりながら消えていくアニメーションを実装する

# はじめに
いま作ってるアプリで「上がりながら消えていくアニメーション」を実装したので方法を共有します。

# イメージ
![Simulator Screen Recording – iPhone 12 – 2022-10-07 at 20.59.10.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/99e8bde8-c51a-2295-c299-17a74f92a234.gif)

# 実装
※関係ないところは省いてます
`RxGesture`の`panGesture`で指が離れた位置を取得します。
指が離れた位置にラベルを配置します。
`UIView.animate`でラベルにアニメーションを追加します。

“`swift
view.rx
.panGesture()
.when(.ended)
.subscribe(onNext: { position in
self.makeCountUpLabel(position: position)

元記事を表示

iOS16時代のLaunch ScreenとInfo.plistとSwiftUI

# はじめに
「部屋とYシャツと私」みたいなタイトルになりましたが、
SwiftUIのみでアプリ開発する時に便利な、Info.plistでLaunch Screenを設定する方法について記載します。
本当はiOS14時代から設定できるようになっていましたが、Xcode14で試してみると他の方の記事の内容と差異があったので、最新手順や調査結果、所感なども記載します。

# まとめ

– 今時のLaunch Screenはカスタマイズして作るものではなくなりました。
Info.plistでLaunch Screenを設定するのであれば、
– **デフォルト設定のままで良い。(systemBackground背景色のみ)**
– **設定したとしても背景色のみで十分。**
– iOS16でアップル純正のプリインストールアプリをいくつか調査しましたが、特別なLaunch Screenは設定されておらず、デフォルト設定となっているようです。

## 理由
(黄色い背景がLaunch Screen)
![timeline.png](https://qiita-image-sto

元記事を表示

Property WrapperとCodableを使ってJSON解析時のデータ型を変換する

### Property Wrapperとは
プロパティに対して制御を行う仕組み
[Swift Language Guide](https://docs.swift.org/swift-book/LanguageGuide/Properties.html)
### Codableとは
JSON形式を任意のデータ型に変換するプロトコル
[Appleのドキュメント](https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types)
### CodableとProperty Wrapperを連携して使う場面
例えばJSONではStringで定義されたが、実際アプリで使う際はIntになる場合など

Json File
“`json
{
“id”:”200″
“version”:”100″ //アプリ側は数値として使いたい
}
“`
Swift Code
“`swift
struct Hoge: Codable {
l

元記事を表示

【2022最新版】法人がiOSアプリをApp Storeに非表示アプリとしてリリースする方法

## はじめに
「iOSアプリのエンタープライズ配布がもう限界だ。非表示?非公開?Appってやつで配信したいので調べて。」と上司に言われてスタートしたApp Storeへのリリース作業。
これが思いのほか大変だったので、手順をまとめてみました。

## 対象者
この記事は下記のような人を対象にしています。

– 駆け出しエンジニア
– プログラミング初学者
– 初めてiOSアプリをリリースする方
– 非表示アプリに興味があるけど、リリース方法調べるのが面倒な方

## 結論
ゼロから始めたら1~2ヶ月はかかるから早めに着手しよう!

***
## **1. iOSアプリの配布方法**
まずはiOSアプリの配信方法について、おさらいします。
### a. AppStore公開App(app)
最も一般的な配布方法。AppStoreで公開されるアプリ。
### b. エンタープライズ([ADEP](https://developer.apple.com/jp/programs/enterprise/))
2020年ごろまで主流だった、従業員向けアプリの配布方法。【Swift】Storyboardを削除してXibで開発をする

# はじめに
Storyboardを使用して開発を進めるとStoryboardが肥大化していきます。
肥大化したStoryboardでコンフリクトが発生すると取り返しのつかないことになることは予想できます。
そのような事態を未然に防ぐためにviewごとにxibを作成して開発をします。
今回はそのやり方を記事にしておきます。

# Mainの削除
① Mainを右クリックします
② 「Delete」を押します
![スクリーンショット 2022-10-06 18.46.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/dda5d094-a12b-6107-7fb4-94e6b83419c1.png)

「Move to Trash」を選択します。
![スクリーンショット 2022-10-06 18.48.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/cfeba53b-8ae2-b42b