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

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

[iOS] サブスクリプションの実装 (StoreKit2, Xcode14)

# はじめに
最初に宣伝ですが、英語など外国語の学習に使える**iOSの単語帳アプリ**をリリースしました。
興味がある方は触ってみてください。

https://apps.apple.com/jp/app/id1633552796

このアプリにサブスクリプションを実装をしたので、本記事ではiOSのサブスクリプションの実装方法についてまとめました。

# StoreKit2ノススメ

iOSではサブスクリプションなどのApp内課金は、`StoreKit`フレームワークを使って実装しますが、StoreKitにはバージョン1と2があり、その2つはかなり実装方法が異なります。

StoreKit2はiOS15以降でしか使えませんが、**StoreKit1と比べて実装がかなり楽になる**ので、これからリリースするアプリならStoreKit2を使うのがお勧めです。

StoreKit2のメリットは、大きく**サーバーサイドのレシート検証が不要になった**点と、**全体的にAPIが便利になった**点で、これにより肌感覚ですが、StoreKit1の3分の1くらいの時間で課金周りの機能が作れるように

元記事を表示

【Xcode】実機でビルドできなくなった

# エラー
![スクリーンショット 2022-10-30 20.40.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/392b2ec6-c6d7-5fa8-46a1-a2c0324019e2.png)
“`
This operation can fail if the version of the OS on the device is incompatible with the installed version of Xcode. You may also need to restart your Mac and device in order to correctly detect compatibility.
“`

# 原因
サポートされていないバージョン

# 確認方法
![スクリーンショット 2022-10-30 20.42.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174

元記事を表示

新 App Store 審査ガイドライン 翻訳&差分ガイド 2022年10月号

# はじめに

これは2022年10月24日付けで変更された App Store 審査ガイドラインの翻訳&差分ガイドです。

[前回](https://qiita.com/midnightSuyama/items/75d289dbca709bdc6494)からの主な変更点は、NFT のアプリ内課金や SNS 広告に対する Apple 税などです。

次の二点は軽微なため、各項目からは除外しています。
新 2.5.18 は 旧 3.1.7 から移行しただけ。
5.1.1(ix) は `highly-regulated` から `highly regulated` に表記変更しただけ。

https://developer.apple.com/app-store/review/guidelines/

# 新規項目

## 1.1.7 紛争や伝染病など最近の出来事を悪用する行為。

> Harmful concepts which capitalize or seek to profit on recent or current events, such as violent confli

元記事を表示

App Store Connectのリジェクト UIBackground

リリースしたiOSアプリの更新を行い審査を上げていたが
リジェクトされて返ってきた。
理由は下記。

Guideline 2.5.4 – Performance – Software Requirements

Your app declares support for audio in the UIBackgroundModes key in your Info.plist, but we were unable to play any audible content when the app was running in the background.

どうやら、xcodeでこのチェックが入っていることが影響しているらしい。
アプリがbackground musicを使用していない場合はチェックを外してビルドする。

![Screen Shot 2022-10-30 at 21.38.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2436967/b4cc4ae2-6fb9-ff56-16de

元記事を表示

【CocoaPods】インストール時に警告が出る

# 警告文
![スクリーンショット 2022-10-30 13.20.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/00cd8676-3996-a9cd-ac83-358b1cebce81.png)

“`
[!] The `TwitterSearch [Debug]` target overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Target Support Files/Pods-TwitterSearch/Pods-TwitterSearch.debug.xcconfig’. This can lead to problems with the CocoaPods installation
– Use the `$(inherited)` flag, or
– Remove the build settings from the target.

[!] The `TwitterSear

元記事を表示

get/set簡単にまとめてみた

## はじめに
get/set・didset/dwillset先に呼ばれるのはどっち?どう呼ばれるの?呼ばれる際にどういうことはできるの?そんな超基本的な使い方を簡単にまとめることとする。間違い・補足等があればコメントください。

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

– 駆け出しエンジニア
– プログラミング初学者

## get/setの詳細
下記コードのように変数や定数の後に{}があるものを**コンピューテッドプロパティ**という。
**コンピューテッドプロパティ**とは値を自分自身で**持たない変数**のことである、ちなみに、ptorocolでの変数定義の際、同じような表現方法のためセットで覚えておくと良いかも。また、それとは逆に**ストアドプロパティ**と呼ばれる変数がある。こちらは値を自分自身で**持つ変数**のことである。
* getは読み取り専用/setは書き込み専用と理解しておく
* setが先に呼ばれ、setでセットした値はnewValueに格納される
* そのため、処理の順番はsetで値を書き込む → その書き込んだ値を元にg

元記事を表示

Flutterでshared_preferencesをいい感じに使う

Flutterでアプリ開発をする際にかなりの確率で使うことになるshared_preferencesをいい感じに使う方法を見つけたので備忘録として書いておく

こちらが公式ページ

https://pub.dev/packages/shared_preferences

インストール用のコマンド
“`
flutter pub add shared_preferences

“`

keyの管理をenumを使って行う
“`
enum Pref {
sample,
}
“`

shared_preferencesを利用するためにインスタンスを宣言する
何度も取得する必要はないので起動時にでもinitializeSharedPreferencesを読んであげればいいかと思います
“`
late SharedPreferences _prefs;

Future initializeSharedPreferences() async {
_prefs = await SharedPreferences.getInstance();
}
“`

shared_

元記事を表示

[Swift] Combine/RxSwift と Concurrency をシームレスに繋ぐオペレータで拡張する

※ 本記事では `Combine` のサンプルコードをメインに記載していきます。
※ 例では `AnyCancellable` や `DisposeBag` は冗長になるので記載していない部分があります。ご了承ください。

# 初めに

アーキテクチャーに `Combine`/`RxSwift` などの**リアクティブプログラミング**を用いていると、後続の`Model`や`Repository`などでも、接続部分をリアクティブプログラミングで書くことがあるでしょう。(連結が楽でコードが綺麗になるため)

しかし、`Concurrency`の登場によって、これが変わろうとしています。

今回は、一部の処理を`Concurrency`に置き換えた際に、`Combine`から`Concurrency`を呼ぶ必要が出てきたため、これを綺麗に書けないかと模索してみました。

## 課題

リアクティブプログラミングにおいて、**処理の末端**で`Concurrency`を呼ぶ分には特に問題ありません。例を見ていきましょう。

簡単な`Concurrency`のメソッドを用意しました。

`

元記事を表示

Renovateまとめ(iOSを例に解説)

# Renovateとは
プロジェクトの依存関係の更新を検知し、PRを作成してくれるツールです。
私がiOSの開発環境に導入したためiOSをメインに紹介しますが、多くの言語や環境に対応しています。

また、スケジューリング以外にも設定はかなり細かく行え、ドキュメントも詳細に用意されているため導入しやすいツールです。
[公式ドキュメント](https://docs.renovatebot.com/)

`Dependabot`というGitHubに統合された同様のツールもありますが、`Dependabot`は最近更新が進んでおらずSwiftPMにも対応していないので個人的には現状`Renovate`の方をお勧めします。

今回は基本的に公式ドキュメントに書いてある内容と、Discussionで聞いた内容を少しまとめてあります。

# Renovateの仕様

#### サポートされているプラットフォーム
– GitHub (.comとEnterprise Server)
– GitLab (.comとCE/EE)
– Bitbucket Cloud
– Bitbucket Server

元記事を表示

【Swift】MintでSwiftLintを導入する

# はじめに
SwiftLintを初めて使ってみたのでやりかたを記録しておきます

# やりかた
### Mintfile
“`:ターミナル
cd プロジェクトフォルダ
“`
Mintfileを作成します
“`:ターミナル
touch Mintfile
“`
Mintfileを開きます
“`:ターミナル
open Mintfile
“`
MintfileにLicensePlistを記載します
“`:Mintfile
realm/SwiftLint@0.49.1
“`
SwiftLintをインストールします
“`:ターミナル
mint bootstrap
“`
### .swiftlint.yml
.swiftlint.ymlを作成します
“`:ターミナル
touch .swiftlint.yml
“`
.swiftlint.ymlを開きます
“`:ターミナル
open .swiftlint.yml
“`
.swiftlint.ymlを編集します
他にもたくさんルールがあるので[公式のルール一覧](https://realm.github.io/SwiftLi

元記事を表示

iOSでSafariからVLCを起動してストリーミング再生する

# きっかけ
iOSでSafariからVLCでストリーミング再生できないという話を見た。
よく見ると、URLencodeされたURLだと、VLCでは再生できない模様。
[Wikipediaによると、パーセントエンコードと言う](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0)んですね、知らなかった。
Infuseというアプリだと、再生できる。

# x-callback-url
iOSではx-callback-urlという仕組みをつかってアプリ間連携している。これまた知らなかった。
x-callback-urlは、http://x-callback-url.com/ にて仕様がまとめられている。

# InfuseとVLCの違い
例えば、
“`
infuse://x-callback-url/play?url=PROTOCOL://ADD

元記事を表示

インジケータの使い方

# 設定
Storyboardを用いた場合、コードで変えれる部分が色ぐらいだと思います。(他にもおすすめの設定があればコメント頂けると幸いです。)

“`ViewController.swift
@IBOutlet private weak var indicator: UIActivityIndicatorView! {
didSet {
// 色指定(青)
indicator.color = UIColor(red: 44 / 255, green: 169 / 255, blue: 225 / 255, alpha: 1)
}
}
“`

# アクション
それぞれ行いたいタイミングで呼び出します。
インジケータは非同期処理と共によく用いられますが、その説明は別記事で紹介します。

“`ViewController.swift
// インジケータを表示
indicator.isHidden = false

// アニメーションを開始
indicator.startAnimating()

// インジケータを非表示
indic

元記事を表示

【Swift】UITableViewでセクションの間隔を調節する

# はじめに
タイトルのまんまなんですけど、わかりにくいので画像を貼っときます。
![Simulator Screen Shot – iPhone 14 Pro – 2022-10-28 at 19.01.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1101ecf2-48ba-5aa3-1217-fc12185897d7.png)

やっていきます

# 調節前のコード
SnapKit使ってます笑
“`swift
import UIKit
import SnapKit

class ViewController: UIViewController {

private let tableView: UITableView = {
let view = UITableView(frame: .zero, style: .insetGrouped)
view.register(UITableViewCell.self, forCellReus

元記事を表示

【Swift】UITableViewのインプレッションをReactiveに計測する

# インプレッション計測について
いろんな呼び方があるようですが、「見た」というイベントを測定することです。タップアクションなどわかりやすいユーザ行動とは別に、例えば配信したコンテンツがどれだけユーザの興味を引いているかを可視化することができます。広告系のコンポーネントではユーザに見られたことが収益につながるのでこのインプレッションが重要な要素になるのですが、サービス独自のコンテンツでもインプレッションを測りたいという需要は多いはずです。
今回はiOSのUITableViewをターゲットに、Cell毎のインプレッションを計測する例です。Delegateパターンはよく目にしましたが、RxSwift等のリアクティブな設計は目にしなかったので、そんな需要に合うかもしれません。

# 要件
弊社SARAHのインプレッション計測要件の一例です
– コンテンツ(Cell)のn割の領域が画面上に表示され
– 且つその状態がm秒間維持されたらインプレッションイベントを送信する
– 同一遷移内では、一度インプレッション計測したコンテンツ(Cell)は再度計測しない

# 環境
– Xcode 14.0.

元記事を表示

Firebase Remote configでアプリのバージョン指定を使う

# はじめに
Firebase上で設定値を変更できるFirebase Remote configですが、一律の設定値を設定するだけでなく、アプリの条件によって該当するものだけを設定することも可能です。
設定できる条件は以下に記載されています。

https://firebase.google.com/docs/remote-config/parameters?hl=ja#condition_rule_types

そこで、アプリのバージョンによって設定値が変わるものを設けようと思ったのですが、グレーアウトされていてどうにも設定ができなかったので、設定方法について説明します。
![スクリーンショット 2022-10-28 9.58.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687960/8a120609-2ac6-23ff-e233-5e4063383771.png)

# 設定方法
まず`アプリ`の項目で、アプリを選びます。
![スクリーンショット 2022-10-28 10.06.14.pn

元記事を表示

子供向けアプリ案として iOS_おやつの合計金額算出アプリ

# はじめに
1枚もののアプリなら作れそうな気がする(←画面遷移時のあらゆる考慮に自身がない)

# 1枚もののアプリを作ろう
なんなら一晩でできるやつ(15~45分)
一晩と言っても、アニメ鑑賞の時間も確保せねばならんしな。

# アプリ画面

![Simulator Screen Shot – iPhone 14 Pro – 2022-10-27 at 22.50.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551624/433cb645-ce58-c284-593e-9280565ec068.png)

# コード

“`swift:ContentView.swift

import SwiftUI

extension UIApplication {
func endEditing() {
sendAction(
#selector(UIResponder.resignFirstResponder),
to:

元記事を表示

MapKitに関して学んだあれこれ

# 概要・背景
なぜ全く業務に関係ないMapKitを学習しているかというと、「行きたい場所をピンで刺して忘れないようにしておく機能を持つアプリ」を個人開発しており、MapKitをこれでもかと言うほど使っているからです。
正直今回の発表で説明しても業務内で活用できる点はないと思われますが、どうか温かい目で見ていただければ嬉しく思います。
(※技術的に未熟で間違っていることも多々あると思われますが、コメントでご指摘・ご教示いただければ幸いでございます。)

## 開発環境
MacBookAir: M1,2020 (チップApple M1)
macOS: Monterey 12.5
Swift: 5.7?ぐらい
Xcode: 14.0

iPhone: iPhone13 128GB スターライト
iOS: 16.0

# MapKitとは
MapKitとはそもそもなんぞや?と問いかけたいのですが、その名の通り地図に関するあれこれを簡単に実装できてしまう、フレームワークのことです。もう少し頭が良さそうに言えば、
>Display map or satellite imagery within

元記事を表示

【SwiftUI】MenuBarExtra使ってみた

# はじめに
以前、SwiftUIでメニューバーアプリを作成しました。

https://qiita.com/SNQ-2001/items/7e8ac52e9e8726228806

この時は公式でサポートされていませんでしたので、NSHostingControllerとNSPopoverを使用して無理やり作っていました。

しかし!!WWDC22で`MenuBarExtra`というメニューバーアプリをSwiftUIで作る用の機能が発表されました!!

macOS13がリリースされたので早速使ってみました!

以前の実装方法と比較しながら紹介できたらと思います!

# 以前の実装方法
“`swift
import SwiftUI

@main
struct SwiftUI_MenuBar_DemoApp: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
Settings { }
}
}

class AppDele

元記事を表示

FlutterでTodo管理dAppを作る

# やること
[web3dart](https://pub.dev/packages/web3dart) / [Truffle](https://trufflesuite.com/) / [Ganache](https://trufflesuite.com/ganache/) を使って簡易的なtodo flutterアプリを作成します。
スマートコントラクトのイベントをsubscribeする実装サンプルがあんまりなかったためそこも含めてやってみました。
Web3初心者のため、間違っていることを言っている可能性がありますのでご容赦ください。
また動作確認はAndroidのみで行っています。

# 作るもの
![dapp.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95489/071d19de-800d-ff46-d53a-0e6cb03d3dce.gif)

# 概要
全体像を把握できてなかったので整理しました。
![arch.png](https://qiita-image-store.s3.ap-

元記事を表示

【SwiftUI】リマインダーを自作!作成手順と開発方法

Appleから提供されている通知アプリ**リマインダー**に似たアプリを個人的に自作してみました。

とはいえ本家にはだいぶ劣りますがシンプルさを活かして作成しています。

![892BB750-91EF-46EB-902D-79BE4FF2BF42.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/01006f08-50dc-a7ec-c210-e1124910cfb7.jpeg)

![F11F449D-11C6-4996-8098-FA90F111139F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/d96845a6-c23e-1b67-cdce-4a7fe15d5953.jpeg)

# 個人開発でリマインダーを自作してみた

今回作るのは**シンプルさを売りにしたリマインダー**です。組み込む機能はできるだけ少なく、誰でも**直感的に使用方法がわかるようなアプリを意識*

元記事を表示

OTHERカテゴリの最新記事