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

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

RxSwiftとRxCocoaを使ってストップウォッチを作る

# はじめに
皆様あけましておめでとうございます?‍♂️
新年早々ぐーたらしている [hayabusabusa](https://twitter.com/hayabusa0112) と申します。

去年からRxSwiftをしっかり使い始めて、ようやく慣れてきたので
今回はRxSwiftとRxCocoaを使ってストップウォッチのようなタイマーを作ってみます。

こんな感じのものです。

![Jan-03-2020 17-36-28.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202306/cac62123-977a-bb7d-4bb8-6bc6e894ba84.gif)

また、作ったものは[QiitaRxTimerSample](https://github.com/hayabusabusa/QiitaRxTimerSample)にあげてあります。

# ストップウォッチの要件
以下の要件を満たす物を作成します。

– 開始ボタンでカウントダウンを開始
– 停止ボタンでカウントダウンを一時停止
– リ

元記事を表示

【初心者向け】未経験からiOSエンジニアとして実務になじむためにおさえておきたい項目リスト

# これは?
知識&経験ゼロから3ヶ月独学した後、iOSエンジニアとして実務を行うようになって半年の筆者が、
iOSエンジニア(Swift × Xcode前提)の実務になじむためにおさえておきたい項目をまとめた記事です。
※「項目」という言葉はこの記事では「iOSアプリ開発の実務で必要な観点」という意味で使います。

「iOSエンジニアになるために勉強しているけど、実務になじめるのだろうか…」
などと不安に思っている実務未経験者の方に向けて書いています。
筆者も実務に入る前は不安でしたが、この記事でまとめた項目リストをあらかじめおさえておくことで、
よりスムーズに実務になじめるのではないかと経験上考えています。

# 本題に入る前に
この記事ではあくまで、実務になじむために知っておいた方がいいことを項目レベルで挙げるまでにとどめ、
各項目の詳細については触れていません。
なぜかというと、必要な項目さえわかれば、それをキーワードに検索したりすることで、
その項目に関する情報はいくらでも手に入るからです。
この自分で調べて実装の方針や具体的手法などを見出す自走力は実務を進める上でもとて

元記事を表示

iOSアプリのバージョンアップをApple Storeへ提出するメモ

iOSアプリのバージョンアップを Apple Store へ提出するときいつも悩みます。今回は個人メモをまとめて記事にしてみました。

## 審査提出までの手順

Generic iOS Device を選択

実行ボタンの右側のプロジェクト

EditSchema

Release に変更

RailsでiOSアプリのURI スキームに対応する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110571/3a89bb3e-bb83-12f1-415d-c5178bac8563.png)

> 一瞬「あれっ…」ってなったので備忘録

# TL; DR
– `routes.rb`内でダイレクトルーティングで定義すればOK

# バージョン
– Ruby:2.6.1
– Rails:5.2.3

> タイトルにiOSと書いてますがAndroidも対応できます。ただのRoutingの話なので。

# やりたいこと
– RailsがWebとモバイルアプリの両方のサーバサイドの役割を担っている
– モバイルアプリ内で、特定の画面に遷移させるURIスキームを使いたい
– メニューなどで表示されていないページへの遷移など
– 上記の例としてInstagramに「運営からのコメント」があり、チャットで操作説明を受ける画面に遷移させたいような目的があったとする
– ヘルパーリンク:`qa_chat`
– URIスキーム:

iOS アプリの View 実装方法の関係 (SwiftUI、Storyboard、Xib、UIKit)

Swift で iOS アプリを開発するにあたり View の実装方法を調べていたところ、Storyboard、Xib、UIKit といった用語の関係が全然分からず非常に苦労しました。

これらの全体的な関係が (自分にとって) 分かりやすくまとまっている記事などが全く見つからなかったので、現時点での自分の理解をまとめます。

※ iOS 開発初心者のため、間違いあればご指摘ください

# 結論 (ざっくりした分類)

SwiftUI、Storyboard、Xib、UIKit をざっくり分類すると以下の通りです。

| 分類 | 要素名 | GUI or コード | コンポーネント化 | 概要 |
| — | — | — | — | — |
| SwfitUI | SwiftUI | コード | ◯ | iOS 13 以上で使える新しい実装方法 |
| SwfitUI 登場以前 | Storyboard | GUI | × | GUI でアプリの View 全体を管理 |
| | Xib | GUI | ◯ | GUI で View のコンポーネントを作成 |
|

SwiftUIでAVFoundationを使ってみた

# はじめに
SwiftUIとAVFoundationをどうやったら組み合わせられるのかなっと考えてみました。
AVFoundationをObservableObjectにしたらカメラの画像を表示せずに顔検出とかできるのはないかと考えていました。
ということでまず作ってみました。

# 作る上で必要なファイル一式
NewFile…で下記のファイルを新規作成してプロジェクトに追加してください

| 種別 | ファイル名 | 概要 |
| ———– | ————– | ——————————————– |
| SwftUI View | CALayerView | CALayer用のView |
| Swift File | AVFoundationVM | AVFoundationをObservableObject化するファイル |

デコレーターをSwift5で実装する

※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。

###The Decorator(デコレータ)

####0. デコレータの意義

デコレータは、あるクラスなどに元は無かった振る舞いを追加するデザインパターンである。元のクラスのコードをいじることなく振る舞いを柔軟に変えることができる。

また継承を行うのとは違って、プログラム実行時に動的にデコレータを使用し機能拡張することもできる。

注意点としては、元のクラスと全く関連性がないような機能をデコレータで付け加えるのはよろしくないという事である。単一のクラスは単一の機能・責務だけを持つべきという「単一責務の原則」に反し、分かりづらく保守しにくいコードになってしまう。

※単一責務の原則については下記などを参照
https://qiita.com/decoy0318/items/f201b725e91a4a1bb4cf

Swiftではextensionを用いるか、デコレータクラスを新たに作る方

AppStoreに掲載するスクリーンショットに「TestFlight」の文字があると審査でリジェクトになるのでご注意を..

# 事象
モバイルアプリのリリース作業で、iOSアプリを審査に出してドキドキ待っていたら、審査出してから3.5時間でAppleからメールが来ました。年始早々なのに対応が早くありがたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/e837d58b-f19f-97a7-0585-264bb7228755.png)

App Store Connectにログインするとステータスが「メタデータ却下済み」になってました。ドキっ…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/8b0d9c8e-a23d-a05b-1c10-ff1097022f07.png)

## メタデータ却下済みとは?
ステータスの見方は[こちらのAppStoreConnectヘルプページ](https://help.apple.com/app-store-connect/#/dev1855

Qiita投稿テスト

Qiita投稿テストです。

iOSのショートカットでWebサイトの二段階認証コード入力の手間を軽減する

# はじめに

Webサイトの二段階認証コード(以下、認証コード)を入力するのは、以下のステップを踏む必要があり、なかなか手間がかかります。

* Webサイトから二段階認証のアプリ(以下、認証アプリ)に切り替えて認証コードを取得する。
* その後、Webサイトに戻って、認証コードをフォームに入力する。

上記の手間をiOSのショートカットを使って自動化することで軽減する方法について紹介したいと思います。

# 前提

* iOSのショートカットを使用するため、iOS12以上が必要になります。
* ただし、本記事はiOS13.3で検証を行なっています。
* 認証アプリのインストールが必要です。本記事のショートカットでは、以下のアプリを例に説明しています。
* Google Authenticator
* Microsoft Authenticator
* Authy

# ショートカットの雛形

Webサイトの共有ボタンからショートカットを実行したいため、作成するショートカットはSafariのWebページを受け入れる設定を行います。

このWebページを

bazelでcarthageで入れたframeworkをimportする

Carthageのframeworkの直下にBUILDを置くと便利そう。

“`python:Carthage/Build/iOS/BUILD

package(default_visibility = [“//visibility:public”])

load(
“@build_bazel_rules_apple//apple:apple.bzl”,
“apple_dynamic_framework_import”,
“apple_static_framework_import”,
)

apple_dynamic_framework_import(
name = “Closures”,
framework_imports = glob([“Closures.framework/**”]),
)

“`

こんな感じ。visibilityをpublicにしないとアプリのBUILDから参照できないので注意
あとはアプリ側のBUILDはこんな感じ

“`BUILD
swift_library(
name = “Sources”,
s

[Flutter] FlipCardを使ってカード型のWidgetを回転させてみる

## やりたいこと
カード型のWidgetをタップするといい具合にアニメーションつけて裏側を表示するように回転したい。

## 使用したライブラリ
[flip_card](https://pub.dev/packages/flip_card)

### pub get
1. pubspec.yamlに「flip_card: ^0.4.4」を追記して“` flutter pub get “`する
2. dartソースに“`import ‘package:flip_card/flip_card.dart’;“`を追記する

## 実装
“` dart
FlipCard(
front: Card(…), // カード前面に表示するWidget
back: Card(…), // カード背面に表示するWidget
direction: FlipDirection.HORIZONTAL, // カード回転向き(HORIZONTAL:横<デフォルト>, VERTICAL:縦)
flipOnTouch: true, // タッチ可否(true:カード部タップで回転す

ブラウザが非表示になった時にマイク入力を解放する

# 困っている事
webAudioAPIを利用してマイク入力データを利用している中で

– 別タブに切り替えた時に、タブの録音中マークが消えない(PC)
– ホームボタンを押した時に画面上に赤い帯が残る(iOS)

タブはこういう丸いやつ↓
スクリーンショット 2020-01-03 19.00.22.png

赤い帯はこういうやつ↓
![S__107831356.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175814/8547f4ee-cba3-b464-f12c-5144e5cbb221.jpeg)

# 環境

## PC
– MacBook Pro 2016
– macOS Mojave 10.14.6
– Chrome

iOSのショートカットで扱う秘密データの管理方法について

# はじめに

iOSのショートカットを作成する上で一度は悩むことは、ショートカット内部で扱う秘密データ(APIで扱うAPIキーやパスワードなどのトークン文字列)をどう管理するかではないでしょうか。

この管理方法について、検討した内容を共有したい思います。

# 前提

* iOSのショートカットを使用するため、iOS12以上が必要です。
* また、iPhoneの1passwordアプリを使用します。

# よくある管理方法の問題

いろんな人が作成したショートカットの中身を見てみると、以下のように秘密データを管理しているケースに遭遇します。

* メモアプリ(あるいは リマインダーアプリ)に秘密データを保存し、ショートカット実行時にメモアプリから検索する。
* ショートカット内部に秘密データをハードコーディングする。
* ショートカット実行時にアラートを表示し、秘密データを入力させる。

メモアプリから検索する方法は、メモアプリがパスワードで保護されていないため、秘密データを他人に見られる恐れがあります。同様に、ハードコーディングする方法についても、ショートカットの内部処理を見れば

XCodeを使わず、MacApp「Tranceporter」でipaをAppStoreConnectに簡単にアップロード

納品されたiOSアプリケーションのipaファイルをXCode使わずにAppStoreConnectにアップロードすることができるTranceferというMac Appが公開されてたので使ってみます。

# 前提
– Apple Developerアカウントを保有している
– App Store ConnectのマイAppに新規アプリ作成していること

# Mac App「Trancefer」
Mac App StoreでTransporterを入手できるようになりました
https://developer.apple.com/jp/news/?id=10152019a

Appのリンクは[こちら](https://apps.apple.com/jp/app/transporter/id1450874784?mt=12)。期待できそう!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/7227cbff-6434-54f9-a4b1-9d832fd1f4bf.png)

はいはー

コードによる制約の追加

趣味でiOSアプリ開発をかじっていた自分が、改めてiOS開発を勉強し始めた際に、曖昧に理解していたところや知らなかったところをメモしています。いつか書き直します。

## 参考文献

この記事は以下の書籍の情報を参考にして執筆しました。5章を読んでの内容になります。

– [よくわかるAuto Layout iOSレスポンシブデザインをマスター](https://www.amazon.co.jp/%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BAuto-Layout-iOS%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B7%E3%83%96%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%92%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E5%B7%9D%E9%82%89-%E9%9B%84%E4%BB%8B/dp/4865940324/)

#コードによる制約の追加
3つの方法がある。
・NSLayoutConstraintのイニシャライ

Storyboardの設定項目

趣味でiOSアプリ開発をかじっていた自分が、改めてiOS開発を勉強し始めた際に、曖昧に理解していたところや知らなかったところをメモしています。いつか書き直します。

## 参考文献

この記事は以下の書籍の情報を参考にして執筆しました。4章を読んでの内容になります。

– [よくわかるAuto Layout iOSレスポンシブデザインをマスター](https://www.amazon.co.jp/%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BAuto-Layout-iOS%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B7%E3%83%96%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%92%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E5%B7%9D%E9%82%89-%E9%9B%84%E4%BB%8B/dp/4865940324/)

##起動時のstoryboardを設定

GUIで設定
プロジェクトファイルのMain Inter

UIViewControllerのレイアウトに関する処理

趣味でiOSアプリ開発をかじっていた自分が、改めてiOS開発を勉強し始めた際に、曖昧に理解していたところや知らなかったところをメモしています。いつか書き直します。

## 参考文献

この記事は以下の書籍の情報を参考にして執筆しました。3章を読んでの内容になります。

– [よくわかるAuto Layout iOSレスポンシブデザインをマスター](https://www.amazon.co.jp/%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BAuto-Layout-iOS%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B7%E3%83%96%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%92%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E5%B7%9D%E9%82%89-%E9%9B%84%E4%BB%8B/dp/4865940324/)

#UIViewControllerとレイアウトをサポートするクラス
##UIViewにおけるレイア

Auto Layoutの基本

趣味でiOSアプリ開発をかじっていた自分が、改めてiOS開発を勉強し始めた際に、曖昧に理解していたところや知らなかったところをメモしています。いつか書き直します。

## 参考文献

この記事は以下の書籍の情報を参考にして執筆しました。1,2章を読んでの内容になります。

– [よくわかるAuto Layout iOSレスポンシブデザインをマスター](https://www.amazon.co.jp/%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BAuto-Layout-iOS%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B7%E3%83%96%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%92%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E5%B7%9D%E9%82%89-%E9%9B%84%E4%BB%8B/dp/4865940324/)

#Adaptivityなレイアウトを実現する

画面サイズの多様化により、どのようなウィンドウ

bazelのiosチュートリアルの修正点

チュートリアルの左上にあるボタンからmasterに切り替えればよかった

ーーーーー

基本的にはこの手順で良い
https://docs.bazel.build/versions/2.0.0/tutorial/ios-app.html

ただ、依存ライブラリが古いまま(2020/1/3現在)なので若干記法などが異なる。
チュートリアルの中で出てくるWORKSPACEとBUILDを次のように変更すればとりあえずビルドまでは行ける。

“`bazel:WORKSPACE
workspace(name = “tutorial”)

load(“@bazel_tools//tools/build_defs/repo:http.bzl”, “http_archive”)
http_archive(
name = “bazel_skylib”,
urls = [
“https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skyli