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

iOS関連のことを調べてみた2020年05月30日
目次

iosのショートカットで現在時刻の年月日時分を別々の変数に入れる

iosに搭載されているショートカットは魅力的なプログラミング環境なんだけど、情報が少ないので、見つけたtipsを記録しておく

#現在時刻の文字列
現在時刻を取得して年月日時分を別々に得るまで
##取得
下の図のアクションで現在時刻を取得して、それを文字列テキストに変換します
![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535482/9bc8fa39-29c7-1ef8-a41b-d651e8b91e74.jpeg)
以下の説明では、最初のアクションを

[日時/{現在の日付}] (1)

次のアクションを

[書類/{日時}からテキストを取得] (2)

と表記します。{}は変数を示します
日時はアクション(2)で「日付として」、日付けフォーマット「中」、時間フォーマット「短」としたとき
2020/05/28 22:47 (a)
あるいは
2020/05/28 5:24 (b)
というフォーマットになります
##年月日の取り出し
正規表現を使って日時文字列から年月日を取り出します

元記事を表示

iOSでmd2pdf

# はじめに

## 自己紹介

H1ronoです。趣味でiOSでプログラミングをしています。

## この記事でやること

[Pythonista3](https://apps.apple.com/jp/app/pythonista-3/id1085978097)と[ショートカット](https://apps.apple.com/jp/app/ショートカット/id915249334)を使用し、iOSで`.md`から`.pdf`を作成しました。詳細を共有することで、iOSの開発能力が伝わればなと思っています。

※筆者の環境はiPhone 8, iOS 13.4.1(OSはこの記事を書いている時点で最新)です。

# 準備

## 1. Pythonista

### 1-1. モジュール

マークダウンからHTMLへの変換に[mistune](https://pypi.org/project/mistune/)モジュール、コードハイライト用に[pygments](https://pypi.org/project/Pygments/)を使用します。

pygmentsは最初からPyth

元記事を表示

XcodeGenを使ってUI Testing Bundle (UIテスト用ターゲット) を追加する

Product Typeに `bundle.ui-testing` を指定するとUIテスト用ターゲットを追加できます。
https://github.com/yonaskolb/XcodeGen/blob/master/Docs/ProjectSpec.md#product-type

project.ymlでUIテスト用ターゲットの定義と、メインのターゲットでのtestTargetの定義をすれば追加できます。

“`project.yml
targets:
ExampleApp:
type: application

scheme:
testTargets:
– ExampleAppUITests
ExampleAppUITests:
type: bundle.ui-testing
platform: iOS
scheme: {}
sources: ExampleAppUITests
dependencies:
– target: ExampleApp

元記事を表示

実機とシミュレータでフォントサイズが違う?UITableViewCellのカスタムビューのフォントサイズをポイント固定で指定してはいけない

## 実機とシミュレータのフォントサイズが違う?
UITableViewに配置するカスタムTableViewCellをつくったときの話。

– 参考:[カスタムTableViewCellを作るときにはだいたいこうやってます\-プロトタイプで作るか、xibで作るか \- Qiita](https://qiita.com/naochi___/items/dcbf58acb925fc716af5)

実機テストのとき **「カスタムTableViewCellのフォントサイズが小さい」** という現象がありました。調べた結果、UILabelのFont設定をポイント指定していたことが原因だったのですが、そこに至るまでに時間を吸われたので、おなじ沼にハマらないように :memo:

### シミュレータでの見え方
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883/79e67f6f-f180-df46-2baa-dd51ff7f599d.png)
>
> 上:標準のUITableViewCe

元記事を表示

Objective-Cで三項演算子のYESの場合を省略する

## 背景
案件のコード見てたらすごく簡潔に書かれた三項演算子があった!
まさかこんな書き方ができるとは知らなかったので、メモしておきます。

## コード
“`objc

NSDictionary *dic = @{@”a”: @”AAA”, @”b”: @”BBB”};

NSString *str = dic[@”b”] ? : @””;
NSLOG(@”str: %@”, str);
// str: BBB

NSString *str = dic[@”c”] ? : @””;
NSLOG(@”str: %@”, str);
// str:
“`

## まとめ
三項演算子の第2項は省略できる?

## 参考
– [3項演算子の第2項は省略できる。](https://qiita.com/KatagiriSo/items/e4138c4e550473e6e96d) @KatagiriSo

元記事を表示

【Flutter】Flutter製アプリをリリースしてみた、あとARとかも使ってみた話

## アプリ概要

ゴルフの[オリンピックゲーム](https://www.clunk.jp/golf-olympic-rules#1)の計算やボールとピンまでの距離のAR測定,1−18までの乱数を生成することができる、ゴルフ幹事向けのアプリです。

[App Store はこちら](https://apps.apple.com/jp/app/engolf/id1507668448?l=en)
[Google Play Store はこちら](https://play.google.com/store/apps/details?id=com.tetsukick.engolf)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/67933117-6fcb-fd17-a67e-2c6f9c547368.png)

CleanArchitecture ファイルの自動生成(iOS・Swift)

CleanArchitectureではファイルを大量に生成するので、できれば手動ではなく自動で行いたい。そのための手段をまとめた。

### Xcodeのテンプレート機能

#### メリット

Xcodeの機能として、テンプレートファイルを用意しておいておくと、ファイル生成時に選ぶことができる。
Xcodeの機能にすぎず、特別な設定は不要でプロジェクトの中身に何ら影響がない。テンプレートファイルは~/Library/Developer/Xcode/Templatesに置く。

#### デメリット

テンプレートファイルは何処かから拾ってくるか自分で書く・編集する必要がある。自分は下記から拾った。

#### 参考
https://medium.com/swift2go/installing-the-clean-swift-template-in-xcode-6b4367006827

### Kuri

#### メリット

普通に使いやすい

#### デメリット

ymlファイル・テンプレートファイルをプロジェクトルートに置かないといけない(プロジェクトの構成に影響がある)

元記事を表示

RxSwiftで検索+ページネーションをいい感じにする

iOSアプリの以下のような条件の検索画面を RxSwift でいい感じに実装する方法をメモします。

– キーワードを入力して検索ボタンをタップすると検索開始する
– 検索APIは結果が多い場合を想定して、ページ番号指定によるページネーションができる
– 検索結果一覧の最後のアイテムを表示するタイミングで自動で次のページを読み込む
– 最後のページまで読み込んだら終了する

### 実装方法

以下、検索画面 `SearchView` を想定したコードです。細かい説明はコメントとして書いてあります。また、ところどころに動作確認用の print 文が入っています。

– 検索ボタンを押した時は `search(by keyword: String)` を実行する
– 結果一覧の最後のアイテムを表示するタイミングで `requestNextPage()` を実行する

“`swift:SearchView.swift
/// 検索画面
class SearchView {
/// キーワードを入力して検索ボタンを押した時に実行する処理
func search(by key

元記事を表示

iOSの各種シミュレーターをfzfで選んで起動する

プリミティブな方法だと

“`console
$ xcrun simctl list
“`

で、起動したいシミュレーターのUUIDを確認して

“`console
$ xcrun instruments -w 208E5166-9C5D-4CA5-A9DE-529AD562D311 # iPhone 11 Pro Max
“`

とすると指定したシミュレーターが起動するのだが、Xcodeをアプデするとシミュレーターも更新されてしまうので、以前書き留めておいたUUIDが使えなくなる。また調べないといけなくてめんどくさい。

ということで、インクリメンタルに端末名で検索してEnterで起動するようにした。

`.zshrc` に以下を追記

“`zsh:.zshrc
function simc() {
xcrun instruments -w $(xcrun simctl list | grep -v unavailable | grep -E “^\s” | grep -v “:” | fzf | grep -oE “\((.+?)\)” | grep -oE “.{2

元記事を表示

ローカライズファイルをAndroidとiOSで共通管理する

## はじめに
AndroidとiOSでサービスを展開している場合、同じ文言を使っている。
プラットフォームごとに管理することで文言の誤字が発生しやすく、コストも上がる。
ローカライズファイルを効率よく管理する方法を考えました

## 前提条件
– AndroidとiOSで共通のリソースを扱う
– 差分を追いやすいこと

## githubを使って管理
– オリジナルデータとなる文言とkeyはjsonにして管理
– githubを使うことで差分を追いやすくなる
– CIを使うことで自動化できる

## ローカライズファイルを更新するツール
– JSONからローカライズファイルを生成するのを簡単にするためにツールを作成した
– [t-osawa-009/JSONToString](https://github.com/t-osawa-009/JSONToString)

### 使い方
1.オリジナルデータとなるJSONファイルを追加

“`json
[
{
“key”: “hoge”,
“key_android”: “hoge”,
“key

元記事を表示

【Swift】選択上限のある複数選択可能なTableViewの実装+スクロールしてもチェックマークがズレないようにする

選択上限をつけた複数選択可能なTableViewの実装が調べても出てこなかったので、簡単に作ってみました。

##### 今回実現したいTableView

1. 複数選択可能
2. 選択状態がスクロールによって他のCellにズレない
3. 選択できる数に上限をつける

[サンプルプログラム](https://github.com/asa08/multiple-select-table)

## 1. 複数選択を可能にする
“`MultipleTableView.swift
// tableViewのisMultipleTouchEnabledをtrueにする
isMultipleTouchEnabled = true
“`
これだけで複数選択が可能になる。

## 2. 選択状態がスクロールによって他のCellにズレない
`Model`に選択状態を持って、その値を元に`Cell`を`init`する。

“`MultipleTableView.swift
func tableView(_ tableView: UITableView, cellForRowAt indexPat

元記事を表示

iOSにユーザーデータを保存する方法と、そのためのコードの書き方: UserDefaults、Core Data、Key Chain、CloudKit

データの保存はiOSアプリの持つ主要な機能です。たとえば、ユーザーが指定した色などの環境設定を保存したり、ウェブサイトのトークンをアプリに保存したり、ToDoリストのアプリを作ってタスクを保存したりすることができます。データをシステムに保存する方法はいくつもあります。

## 目次

[User Defaults](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#user-defaults)
[Core Data](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#core-data)
[Keychain](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#keychain-キーホルダー)
[iCloud CloudKit](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#cloudkit)

この記事では、上記の方法それぞれについて、サンプルコ

元記事を表示

tns run iosよ、あなたはなぜiPad Airを起動するのか?NativeScript-VueのiOSエミュレータの初期デバイスをiPhoneに変更する

# TL;DR

`package.json`に

“`
“scripts”: {
“ios-iphone”: “tns run ios –device ‘iPhone 8′”
},
“`

を追加する

# 教えてくれた人

# tns run iosよ、あなたはなぜiPad Airを起動するのか

NativeScript−VueのアプリをMac OS Catalina10.15.4で開発中にiOSエミュレータを`tns run ios`(デフォルト)や`npm run serve:ios`(`vue-cli-plugin-nativescript-vue`でコードシェアリングしている場合)で起動すると、iPad AirのSimulatorが起動する。
image.pngUIWebViewを使っているFrameworkを探す

アプリにUIWebViewが含まれている場合、App Store Connectへのアップロード時にITMS-90809の警告がメールで送信されたりするかと思います。

> ITMS-90809: Deprecated API Usage – App updates that use UIWebView will no longer be accepted as of December 2020. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

警告にもある通り、既存アプリでUIWebViewを利用している場合は2020年12月で受け付けがされなくなるようなので、それまでに対応が必要です。
(参考: [ウェブビューを使ったAppのアップデート \- ニュース \- Apple Developer](https://developer.apple.com/jp/news

元記事を表示

iOSアプリにYouTube動画を埋めこもう2020

iOSアプリにYouTube動画を埋めこんだので、その覚書です。

# 基本
YouTubeの公式ドキュメントを見ると、[YouTube-Player-iOS-Helper](https://github.com/youtube/youtube-ios-player-helper)というOSSを使うのを推奨されます。
基本WebViewをベースに、いい感じのサイズにしたYouTube動画を埋めこんで、コントローラーをつけるという感じです。

(公式ドキュメント)
[Embed YouTube Videos in iOS Applications with the YouTube Helper Library](https://developers.google.com/youtube/v3/guides/ios_youtube_helper)

(わかりやすいチュートリアル)
[[Swift] YouTube-Player-iOS-Helper を使って YouTube 動画を再生してみる](https://dev.classmethod.jp/articles/youtube-pla

元記事を表示

俺の嫌いなXcodeが5秒でイチオシ開発環境に

iOS開発者の皆さん、毎日、ハッピーな開発ライフ過ごしてますでしょうか。

楽しい開発には快適な開発環境は欠かせませんが、もちろんiOS開発者の皆さんが使うのはXcodeですよね。
いや、俺はAppCodeという人はそっとタブを閉じましょう。

JetBrains製品、良いですよね。Android Studio も素晴らしい。どんな言語でも同じ様な操作感で。でもちょっともっさりしてるんだよな。
その点、Xcodeは動きはキビキビしていて玄人プログラマー好み。

でも一つ、**すごく嫌なところ**がありました。これさえ直してくれれば最高なのに。

普通、Xcodeって編集する時、複数のタブ開くじゃないですか。自分の場合はこんな感じ。
![スクリーンショット 2020-05-27 15.16.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22218/cfe2f4de-72cd-803b-226e-ffd2c3c488fa.png)
Storyboardと関連のソースファイルを幾つか。そして、デバッグす

元記事を表示

SwiftのReverse GenericsというかOpaque Typeの紹介(社内勉強会用)

# Swiftとは

[Wikipedia](https://ja.wikipedia.org/wiki/Swift_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)) より

> Swift(スウィフト)は、アップルのiOSおよびmacOS、Linuxで利用出来るプログラミング言語。Worldwide Developers Conference (WWDC) 2014で発表された。アップル製OS上で動作するアプリケーションの開発に従来から用いられていたObjective-CやObjective-C++、C言語と共存することが意図されている。

swift.org [Language Guide](https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html) より

> Swift is a type-safe language, which means the language helps you to

元記事を表示

FirebaseCrashlyticsで強制クラッシュさせる時の方法が変わっていたお話

# 環境
– Xcode 11.4
– Swift 5.2
– FirebaseCrashlytics 4.0.0-beta.5

# 概要(2020/05/27時点)
FirebaseCrashlyticsで強制クラッシュをさせようとしたら、以下の二点で微妙に詰まったのでメモ書きとして残しています。
– シングルトンインスタンス取得の方法が変わっていた
– 強制クラッシュを起こすメソッドが消えていた

## シングルトンインスタンス取得
#### 以前のver
“`swift
Crashlytics.sharedInstance()
“`

#### 現在のver
“`swift
Crashlytics.crashlytics()
“`

## クラッシュさせる
#### 以前のver

“`swift
Crashlytics.sharedInstance().crash()
“`

#### 現在のver
公式ドキュメントによると `fatalError()` を使えとのこと。

“`swift
fatalError()
“`

# 引っかかった原因
日本語のドキュ

元記事を表示

Wi-Fiオンオフ両方をこなせるショートカットを作ろう

## 前置き
iOSショートカットを使うと、Wi-Fiを完全にオフにできるので便利です。
ただ、「Wi-Fiオンの方も作ってホーム画面に配置する」となると二つもアイコン枠が必要なので少し邪魔です。
そんな問題を解決するために、「Wi-Fiオンオフを切り替えられる(=トグル式)ショートカット」を昔作ったので備忘録として書いておきます。

## レシピ
![4EF57D4E-F0CF-4C43-8C29-84AD064E93D0.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561438/5c55a4da-d7d9-24d7-8274-bc45d523d9ee.jpeg)

ショートカットからホーム画面に戻る方法はいくつかありますが、[supermamon](https://routinehub.co/user/supermamon)さんの[Springboard](https://routinehub.co/shortcut/2900)を使って戻る方法がぶっちぎりで早いのでおすすめです。

## 実際に

元記事を表示

OTHERカテゴリの最新記事