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

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

App Store Connect のカテゴリ値

|日本語|値|
|:–|:–:|
|エンターテイメント|MZGenre.Entertainment|
|ゲーム|MZGenre.Games|
|ショッピング|MZGenre.Apps.Shopping|
|ステッカー|MZGenre.Apps.Stickers|
|スポーツ|MZGenre.Sports|
|ソーシャルネットワーキング|MZGenre.SocialNetworking|
|ナビゲーション|MZGenre.Navigation|
|ニュース|MZGenre.News|
|ビジネス|MZGenre.Business|
|ファイナンス|MZGenre.Finance|
|フード/ドリンク|MZGenre.Apps.Food_Drink|
|ブック|MZGenre.Book|
|ヘルスケア/フィットネス|MZGenre.Healthcare_Fitness|
|ミュージック|MZGenre.Music|
|メディカル|MZGenre.Medical|
|ユーティリティ|MZGenre.Utilities|
|ライフスタイル|MZGenre.Lifestyle|
|教育|MZ

元記事を表示

watchOS 6 の注目点をふまえてSwiftUIでWatch Appを作ってみた!!

## はじめに
昨年の Advent Calendar で **日報ちゃん**という
Apple Watch の App を作りました。
出社,お昼ごはん,退社などの各アクティビティを
Slack の勤怠チャンネルに投稿するというわざわざスマホやPCを使わずに
手首の操作で完結するアプリです。

WWDC19 で watchOS に大もきな変更がありました。
また,SwiftUI も発表されたので SwiftUI で作ってみようと思い取り組んでみました。

7月の iOS 開発合宿で作り始めたのですがしばらく放置されてしまってました。
Qiita Advent Calendar のおかげで **勤怠ちゃん** としてようやく形にできました。

## watchOS 6 のここに注目!
### watchOS 6 から iPhone 側のアプリ実装が不要になった

watchOS 5 までは iPhone 側のアプリ実装が必要でしたが,
Watch App が単体で開発可能になりました。
iPhone 側のコンテンツありきの開発であったため,より自由な尖ったものを開発できます。

Xc

元記事を表示

iOSで使う暗号化処理をユニットテストする方法を考える

iOSアプリでちょっとした暗号化処理が必要な場合があります。たとえば何らかのハッシュ値をサーバーとの認証処理に使うといった例が考えられます。
ちょっとした処理なのでこんな感じで自前で実装することも多いのではないでしょうか?

“`swift
import Foundation
import CommonCrypto

final class MyCrypto {
func sha256(_ string: String) -> String {
var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))

let data = string.data(using: .utf8)!
data.withUnsafeBytes { pointer -> Void in
CC_SHA256(pointer.baseAddress, CC_LONG(data.count), &hash)
}
retur

元記事を表示

Xcode11の新規プロジェクト作成につまずいた

# はじめに
Xcode11 で新規にプロジェクトを作成し、iOS13 未満もサポートしようとすると大量のエラーが出てしまいます:dizzy_face:

error

この辺りめんどくさくて最近作ったやつ(下記とか)は大抵 iOS13 以上サポートにしてましたが iOS13 未満もサポートするため調べてみました。

* [iOSのおしゃれな文字入力ライブラリつくってみた(swift)](https://qiita.com/am10/items/5c912c1fe723f816ee9e)
* [Swiftではじめる日本語プログラミング](https://qiita.com/am10/items/34281848c3c848659043)

# 対応
## SwiftUI を使わない
とりあえず新規作成時に User Interf

元記事を表示

クリスマス前にARでジョークアプリをつくってみた話

## 序
この記事は[iOS #2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ios-2)の19日目の記事になります。
あんまり今年は書くモチベなかったのですが、ちょうどわいたところに空きがあって飛び入り参加しました。

とうようです。

普段は個人でiOSアプリつくったり、大学院でUIの研究室にいたり、[中高生にITを教えたり](https://life-is-tech.com/leaders/)しています。
ちなみに大学生・大学院生向けにちょうどこの**Life is Tech !**という中高生にITを教える団体のメンター募集がはじまっているので良かったら応募してみてください!笑
楽しい上にいろんなスキルが身につくのでぜひ!

>ーー切り取り線ーー<

さて、本題。

## はじまり

はじまりはこの秋、2019年9月にさかのぼります。

増税前のiPhone 11シリーズの発表。僕は長年iPhone 7 Plusを利用していたのですが、そろそろ欲しいと。
Face ID使ってみたいと。

そんなわけ

元記事を表示

Swiftでクリスマスツリーを描画してみた

##久々の投稿でSwift縛りでどんな記事にしよか…
Swiftでなにかクリスマスっぽい事をしたいと思ったけど
案が何も思いつかない。。。。

**ひらめいた!!**

昔、フラクタル図形の木をObjective-Cで作った事があるから
それをSwiftで作ったらええんや??

そうと決まれば~~真似~~インスパイアできるコードを探すんや!!

全然ええ感じのやつが見つからへん…

ちょっと微妙な木の形のやつならインスパイアできそうやし
こうなったらちょっと妥協するか。。

**どや!**
Simulator Screen Shot - iPhone 8 - 2019-12-16 at 21.27.58.png
(これだとただのフラクタル図やな、、、せや!クリスマスっぽく装飾しよ!)

元記事を表示

iOSエンジニアがWebをペアプロで実装してみた話

# はじめに

[GameWith Advent Calendar 2019](https://qiita.com/advent-calendar/2019/gamewith)の19日目の記事になります。

今回の記事は**iOSエンジニアの自分がWebの新施作をフロントエンジニアとペアプロをしながら実装した時の話**です。
自分は普段GameWithの**価値検証チーム**という少人数のチームで、アプリやWebの大幅な数値改善が見込めそうな施作をメインに企画・進行・実装まで一通り担当しています。

基本的に価値検証フェーズと本実装フェーズで分けて実装しており、価値検証フェーズにて目標数値に達したもののみ本実装フェーズに移行しています。
価値検証フェーズでは片方のみに展開することでUXが下がるといった施作以外は基本的にはスピード重視と施作を撃てる数を増やすためにiOS・Androidのどちらかのみで実装しています。

今回の施作はコンテンツの性質などから両OSで実装するのがベターとの判断になったので、Webで実装したものを両OSのWebViewで表示するといった形式を取っています。

元記事を表示

iOS Simulator(iPhone Simulator)をMacにインストールする方法

# この記事は
[![Screenshot from Gyazo](https://gyazo.com/1fdb1a3ea73e0d596d349b4a8c566585/raw)](https://gyazo.com/1fdb1a3ea73e0d596d349b4a8c566585)
MacではXcodeをインストールするとiPhoneやApple WatchのSimulatorを使うことができます。
この記事はその設定方法を書きました。

# 手順
## ① Xcodeのインストール
App Store、またはDevelopperサイトからXcodeをインストールします。
・[App Store](https://apps.apple.com/jp/app/xcode/id497799835)
・[Developerサイト](https://developer.apple.com/download/more/)

## ② Simulatorのインストール
(※結構時間かかります & 1つあたり2.0 ~ 3.5GBぐらいあります)
1. Xcodeを起動する
2. メニュー

元記事を表示

XCTest+αでJSON形式のテストデータを使い倒す

テストを拡充させていくにあたり,検証に都合のよいデータを手軽に用意できるようにした作業内容のメモ.
サンプルコード→[gaussbeam/TestDataloader](https://github.com/gaussbeam/TestDataLoader)

## やりたいこと
– あらかじめ用意しておいた`.json`ファイルと型を指定することで,jsonファイル内のデータをもとに必要な形式のデータを取得できるようにする

### なぜやりたいのか
1. テストコード内で`init()`すると,テスト自体とは直接関わりのないコードが増え,テストの内容が把握しづらくなる
1. そもそも`init(from decoder: Decoder)`しか実装していないようなオブジェクトの場合,コードからのテストデータ生成のために別途イニシャライザを定義する必要がある
1. 異なるテストケースで同様のデータを利用する場合,その都度データ生成用のコードを書くのは冗長

## やったこと
以下に示す方法でjsonファイルから任意の型のテストデータを生成できるようにした.

### 1. `Load

元記事を表示

react-native-maps使おうとしたらAIRMapが無いって怒られた

## 環境

“`
$ react-native -v
react-native-cli: 2.0.1
react-native: 0.61.5
“`

## 状況
react-native-mapsを使ってiOSで地図を表示させたい。
でも、react-native run-iosで起動してみたらエラー出てしまったので解消したい。

## run-iosまでにやったこと

“`
$ npm install react-native-maps // react-native-mapsをインストール
$ react-native link react-native-maps // react-native-mapsをプロジェクトと紐付け
“`

そして下の記事を参考にしてApp.jsをちょちょっと書き換えてあげました。

(参考)https://qiita.com/megane42/items/a53db54c0aa64647c6e3

## エラー内容
![スクリーンショット 2019-12-19 6.58.59.png](https://qiita-image-st

元記事を表示

FeliCa が遅いしフルスキャンも不可能 前編【iOS 13 Core NFC】

気づけば Advent Calendar も後半戦…。
私はこれまで FeliCa を iOS 13 の Core NFC で読み取るサンプルを紹介してきました。

– [iPhone で電子マネー(楽天Edy、nanaco、WAON)を読み取ってみよう!](https://qiita.com/treastrain/items/f5c518486d19ba3573d3)
– [iPhone で交通系IC(Suica、PASMO、ICOCA、…etc.)を読み取ってみよう!](https://qiita.com/treastrain/items/d54ef2c2abbcd40fb9f1)

そして、前回の

– [FeliCa システムコードの切り替えは Polling コマンドのみで【iOS 13 Core NFC】](https://qiita.com/treastrain/items/04f50a91f70fd6480fc0)

では iOS での FeliCa の取り扱いの制限(システムの切り替えを IDm で行うことができない)について述べました。

…ですが、現在の iOS

元記事を表示

RxSwiftのオペレーターの勉強 その2(結合編)

[Atrae Advent Calendar 2019](https://qiita.com/advent-calendar/2019/atrae) の18日目を担当するアガツマです。
普段は、ビジネス版マッチングアプリ [yenta](https://yenta.talentbase.io/yenta) のiOS版を開発をしています。

[前回](https://qiita.com/_xAGAx_/items/b3fe92c9f2a31e1a6ca5)に続いて、RxSwiftのオペレーターについて書きます。
今回は、オペレーターの中でも複数のobservableを合成(結合)するようなものについてまとめました。
RxSwiftを勉強する際の参考になったら嬉しいです。

※RxSwiftのオペレーターとは、Observableに用意されているイベントを加工する用のメソッドのことを指します

# 複数のobservableを合成するオペレーター

## combineLatest

**処理**
2つのObsrvableのを監視してどちらか1つのObsrvableが送信される時

元記事を表示

Firestoreリアルタイムリスナーで通知ドットを実装してみたよ

リアルタイムリスナーってすごい機能なのにあまり使い道を見出せず単一リクエストばかりしていたのですが、ちょっと使えそうな余地のある部分を発見したので試してみました。

## 通知ドット
SNSやお知らせなどのタブ上にあるアレです。不定期更新な機能でも見て欲しい時に見てもらうための導線になるのでよいものです。
未読がないか毎回フェッチするよりも、リアルタイムアップデートしたほうが面白いのでリアルタイムにデータを同期して通知ドットを表示させてみようと思います?

## 仕様
– お知らせ一覧へ遷移するタブをもつアプリ
– お知らせに未読があればお知らせタブ上に通知ドットを表示してあげる
– お知らせのソートは常に最新順

## 実装方法

### 未読判定
未読かどうかの判定は取得された最新1件のドキュメントIDと既読とみなされたローカルに保存されているドキュメントIDで判断するシンプルなものです。

“`swift
public struct UnreadState {
private(set) var latestLocalId: String?
private(set

元記事を表示

【iOS】サポートバージョンを上げた時にやったこと

# 概要
アプリを長い間開発していると、必ず生じるサポートバージョン問題。
そんなサポートバージョンを上げた時にどこを変更するのか忘れそうなので
備忘録的な意味合いも兼ねて更新したいと思います。

## iOS Deployment Target
まぁ、これは言わずもがなですね。
ここで内部的には判定されているものと思われます。

## @available属性
旧バージョンに対応していた場合、新しいOSでしか対応していないAPIを使う際には
@available属性などで条件分けして実装していたと思います。
これが必要なくなります。

“`swift
@available(iOS, [version], *)
“`

[version]の値が今回のサポートバージョンに含まれている場合は
消してしまって問題ありませんので消してしまいましょう!

また、この表記がある場合、この[version]に満たないバージョンで
代わりに呼ばれるメソッドがあるはずなので、そちらも消してしまいましょう!

## Podfile
忘れがちなのが、これではないでしょうか。
~~(今回この記事を書いたの

元記事を表示

プロパティをクロージャで初期化する(Initialization Closure)

前回の投稿から長い時を経て、就職してiOSエンジニアとして日々勉強をしています。よろしくお願いします。
今回はタイトルの通り、Initialization Closureについてまとめようと思います。

(この記事は[就職先の技術ブログ](https://techblog.recochoku.jp/7479)の内容を転機したものです)

## TL; DR

– Initialization Closureは__Stored Property__の初期化に使われる書き方。
– Computed Propertyではないので、__`{}`の中は1度しか呼ばれない__。

## 未知との遭遇

現在開発中のアプリでUIViewControllerのライフサイクルとAuto Layoutの反映タイミングに悩まされ、`viewDidLayoutSubview()`で最初の一回だけ処理をしたくなり、[この記事](https://blog.kuromusubi.com/develop/language/swift/20180525-lazy)にたどり着きました。

実際に以下のようなコードを書

元記事を表示

【Swift】Partial application of ‘mutating’ method is not allowedってなんだ

structを使っていたら、

> Partial application of ‘mutating’ method is not allowed

というエラーに遭遇しました。
僕の場合、原因は別件だったんですが、日本語情報があまりないエラーメッセージだったので、記事にしてみます。

# 僕のエラーの原因
僕の場合、

“`swift
protocol aDelegate {
var aView: ViewClass
}

struct AIRadarMapBorderRenderer {

private weak var delegate: aDelegate?

private mutating func aFuncation() {
switch aView.aVariable { //この行で”Partial application of ‘mutating’ method is not allowed”
case .any
//any
default:

元記事を表示

Sketchと1対1を目指すAtomic designなSwiftUIの作り方

## はじめに

[VALU Advent Calendar 2019](https://qiita.com/advent-calendar/2019/valu) 11日目 (!) の記事です!

VALU ではデザインに Atomic design (アトミックデザイン) を採用しています。
本記事では,VALU のデザイナーが作成した素敵な Sketch シンボルを差分なく反映し,かつ変更に耐えうる SwiftUI を運用するための方法をご紹介しようと思います。

[昨年の VALU Advent Calendar](https://qiita.com/advent-calendar/2018/valu) にて,[Sketchと1対1を目指すAtomic designなStoryboardの作り方](https://qiita.com/YutoMizutani/items/e14c918232af83f34e29) を投稿しました。本記事はそれを SwiftUI で行ったものです。まだご覧になっていない方は先にご覧ください。

## Highlights

– SwiftUI を利

元記事を表示

Flutterで作ったアプリをfastlane+App Distributionで配信する(iOS編)

開発以外のメンバーに実機テストをしてもらう場合にTestFlightだけで配信してたけど、流石に面倒なのと、ステージング環境用にビルドしたアプリを本番用とは別アプリとして配信したいので、[App Distribution](https://firebase.google.com/products/app-distribution/?hl=ja)で配信することにした。
ひとまずローカル環境でfastlaneを使ってApp Distributionに配信できるようにしたので、備忘録。

#1.環境を分けてビルド
基本的には@mono0926さんの記事で大体できるはず。とても丁寧に書かれていて、ありがとうございます。
[Flutterで環境ごとにビルド設定を切り替える — iOS編](https://medium.com/flutter-jp/flavor-b952f2d05b5d)

1個注意点として、ステージング用に別アプリにする場合、Identifiersをそれ用に用意しないといけない。
例えば、`com.test.app`が本番用だとして、`com.test.app.stg`みたいな

元記事を表示

iOS でマルチモジュールを試したときにハマったこと

Web ではマイクロサービスの話をよく聞くようになり、また Android でもたまにマルチモジュールの話を聞くようになりました。

iOS でも企業で採用している話をチラチラ聞くようになり、また今回のアドベントカレンダーにもマルチモジュールについての話が上がっています。

iOSでもマルチモジュール化したい!
https://qiita.com/hironytic/items/3fcd825cc1ef135f5b0f

ということで私もプライベートで作成している iOS アプリをモジュール分割してみたらハマりまくった話。

## 環境
– Swift: 5.1
– Xcode: 11.3
– Deployment Target: iOS 13.1

今回はサンプルとして、

– インターフェースなどを提供する `Common` モジュール
– `Common` モジュールを実装する `Core` モジュール
– 画面などの機能を提供する `ModuleA` ・ `ModuleB` モジュール
– アプリのエントリポイントとなる `MultiModuleSample` モジュール

元記事を表示

[iOS] IPAファイルのプロビジョニングプロファイルを差し替え

## [iOS] IPAファイルのプロビジョニングプロファイルを差し替え

**iPAファイルを展開する。**

“`
unzip *.ipa
“`

**再署名に必要になるentitlementsファイルを作成**

“`
codesign -d –entitlements :- Payload/*.app > entitlements.plist
“`

**再署名に必要になるentitlementsファイルを作成**
「○○○○○○.mobileprovision」は、Apple Developerから更新したプロビジョニングプロファイル

“`
cp -p ○○○○○○.mobileprovision ./Payload/*.app/embedded.mobileprovision
“`
「replacing existing signature」で成功

**再署名を実施**
「’iPhone Distribution: ○○○○○○’」は、キーチェーンアクセス.app から確認できる証明書の名称

“`
codesign –force –sign ‘

元記事を表示

OTHERカテゴリの最新記事