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

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

[iOS] シェアシート上のプレビューをあるべき姿に

![ezgif.com-gif-maker4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31285/78751c55-9733-a6a2-6a5e-2424b4bbfb75.gif)

iOS13 からシェアシートが変わりましたね。変化の一つとして、シェアするアイテムのプレビューが追加されています。素晴らしい機能です。
その一方で、アプリ開発者にとっては新たな刺客ともいえるでしょう。

このプレビューは開発者が望む望まないに関わらず表示されます。しかも、何も対策をしないとユーザにとって違和感のある表示になってしまうことがあります。

この記事では、UIActivityViewController を用いたシェア画面上のプレビューを操作・カスタマイズする方法を紹介します[^1]。プレビューは一見奇妙な動きをしますし実装に関する情報も少ないのですが、ここで紹介する 2 つのポイントを把握しておけば簡単に扱えるようになります。

[^1]: この記事は[potatotips #66 (iOS/Androi

元記事を表示

BitriseのAutoProvisionと戦った話

この記事は豊田高専コンピュータ部アドベントカレンダー8日目の記事です

## iOSアプリを自動でデプロイしたい
BitriseでiOSアプリのCI/CDを回そうとしたとき、iOSアプリ特有のProvisioningをBitriseが自動で行ってくれるAutoProvisionで躓いたのでその備忘録にしたいと思います。

## 前提条件
– すでにBitriseにiOSアプリを設定している
– あとはProvisioning通してBuildするだけ
– Apple Developer Programに登録済みである

## やったこと
これは初心者が試行錯誤の末動いたやり方なので足りなかったり多かったりした場合はコメントで指摘してもらえると助かります。

### BitriseのアカウントにApple Developerアカウントを紐付ける
これ、割と忘れがちな気がするのですが(自分がそうだった)あまり他の記事ではちゃんと書かれていなかった気がするので忘れずにやっておきましょう。

右上のアイコンからAccount settingsを選んで左側のConnected Accoun

元記事を表示

[Swift] Combineを使ってMVVMでNotificationCenterを実装する

# はじめに
ありがといことにiOS13以上の案件に携わり、Combineを書く機会があったので備忘録的に残そうと。

記事を書いているうちにNotificationCenterよりもMVVMの話がメインになってしまった気がする、、笑
(普段から “RxSwift“ + “MVVM“ に慣れている人にとってもはつまらない記事かもしれません、、)

# NotificationCenterの実装比較

Combineの実装を見る前に、“通常“ / “RxSwift“ / “Combine“でのコード比較をさらっとしていきたいと思います。

## 1. NotificationCenter

画面回転の通知を受け取るためのNotificationを例にしています。

“`.swift
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

NotificationCenter.default.addObserver(self, selector:

元記事を表示

絶対に起きられるアラームアプリを作る

こんにちは。
この記事はクソアプリ [Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kuso-app) の8日目の記事です。

# どうしても起きたい

この地球という星で活動していると、何度か **絶対に起きないといけない日** という日が来ます。
これが実に厄介でして、私のようなスロースターターの人間には非常に困るわけです。

地球には目覚まし時計というテクノロジーが存在し、休眠状態の人間を設定した時刻に起床させることが出来ます。
しかしこれには致命的な不具合が存在し、一旦起床させた後に再び休眠状態へ陥る、いわゆる **二度寝** が発生してしまうわけです。

今回の目的は **二度寝をさせないアラームアプリ** を作成します。

# アラーム
今回はiOSアプリとして制作します。やはりアラームは携帯で設定する人が多いですからね。
せっかくなので噂のSwiftUIを使いましょう。
こんな感じで、UIをSwiftのコードで記述できます。

スクリーンショット </p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>iOS</div>
<div class='tag-cloud-link'>Swift</div>
<div class='tag-cloud-link'>SwiftUI</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/hal_cha_n/items/c0611578625ee14682cd'>元記事を表示</a></div>
<h3 id=「”A”…”Z”」でアルファベットの配列を取得する

#経緯

勉強のコードを動かしてると理解が合ってるか確認するためにA~Zの文字をループで回して試したくなることがあって

“`swift
func hoge(_ v:String){
//ここで書いた処理が合ってるか試したい
}

let test = “ABCDEFGHIJKLMNOPQRSTUVWXWZ” // <- なんかめんどい for c in test{ hoge(c) } ``` ```swift for c in "A"..."Z"{ // <- こうしたい hoge(c) } ``` C言語の時ならChar型に++でループさせてたなあ... #やってみた ```Stirng+extension.swift infix operator ... extension String{ static func ...(left: String, right: String) ->Array {
return ((left.unicodeScalars.first!.value) … (right.unic

元記事を表示

一定以上スクロールしたらヘッダーが固定するScrollViewをたったの1行で実装する方法

# はじめに
この記事は、[ZOZOテクノロジーズ #4AdventCalendar2019](https://qiita.com/advent-calendar/2019/zozo_tech4)の記事です。
昨日は[@zukkey](https://twitter.com/zukkey59)さんの[「Epoxy + PagingLibrarySupportで追加読み込み機能を実装してみる」](https://qiita.com/iiizukkeyiii/items/4eb34698d2fc4a987ca7)の記事でした。

ZOZOテクノロジーズでは、他にもAdventCalenderを書いている方がいらっしゃるので、よかったらみていってください!

[ZOZOテクノロジーズ #1AdventCalendar2019](https://qiita.com/advent-calendar/2019/zozo_tech)
[ZOZOテクノロジーズ #2AdventCalendar2019](https://qiita.com/advent-calendar/2019/zozo_tech2

元記事を表示

自動テストでSimulatorの位置情報を偽装したいときはidbをお忘れなく

Simulatorで位置情報を偽装したく、driver.set_locationで位置情報を偽装してテストを実行したのですがiOSのときだけ下記のエラーが出ました。

“`
An unknown server-side error occurred while processing the command. Original error: Could not complete operation. Make sure Simulator UI is running and the parent Appium application (e. g. Appium.app or Terminal.app) is present in System Preferences > Security & Privacy > Privacy > Accessibility list. If the operation is still unsuccessful then it is not supported by this Simulator. Original error: Command ‘o

元記事を表示

Sign in with Apple+Cordovaについて

Sign in with AppleをCordovaアプリで実装してみた際の記録です。

## Sign In with Appleとは
– Apple IDでアカウント作成・ログインができる
– Touch ID/Face IDで認証できる
– 登録するメールアドレスをランダムにできる

## 実装手段は2つ
– Sign In with Apple JS
– AuthenticationServices (ネイティブ SDK)

## とりあえずJS版をCordovaに埋め込むと・・
CordovaはWebView上で動作するので、Sign In with Apple JSで事足りるのでは?と思い、JS版をCordovaに埋め込んでみました。
とりあえず、UIWebVeiw上で動作させてみたところ、SignInボタンをタップすると、ブラウザに飛びました。
※ちなみに、生のUIWebViewだと無反応なので、そもそもUIWebViewは対応していないようです。

WkWebViewの場合は認証のモーダルが開きました。
ただ、CordovaのWebView内だとredirect

元記事を表示

UICollectionViewのレイアウト崩れに対応する(画面回転対応)

画面回転時の、UICollectionViewのレイアウト崩れについて。
こんな感じで対応した、というのをまとめておく。

# よくある4カラムの実装(修正前)

端末の向き固定で使う分には問題はないが……。

“`swift
class CollectionViewController: UIViewController {

private var collectionView: UICollectionView!
private var layout: UICollectionViewFlowLayout!

override func viewDidLoad() {
super.viewDidLoad()

// レイアウトを決める
layout = UICollectionViewFlowLayout()
layout.minimumInteritemSpacing = 16
layout.minimumLineSpacing = 16
let itemC

元記事を表示

iOSがマウスで操作出来るようになったのでUIテストの自動化を試してみる

# 概要
– 結論から言うとあまり実用性はないよ
– iOS13/IPadOSからiPhone/IPadをマウスで操作することが可能になったよ
– Raspberry Pi経由でPCからマウスの信号を送ることが出来るよ
– 今まで自動テストが不可能だった機能でも検証が可能になるのでは?
– ニコニコ生放送アプリのカスタムキャスト連携配信機能を自動テストするよ

こんな感じ
![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87517/84fa35fd-4910-58b2-bcde-2e7d10764d6d.gif)

# PCからiOS端末のタッチ操作を行う

## iOSでポインティングデバイスを有効にする

iOSでのマウス(ポインティングデバイス)対応は AssistiveTouch の機能として行われているので、
以下に記載された通りに「設定」>「アクセシビリティ」>「タッチ」から設定します。

https://support.apple.com/ja-jp/HT210546

元記事を表示

【iOS】SideMenuの良さげなライブラリ「SideMenu」を試す

## SideMenu

シンプルなサイドメニューのライブラリで、
最近もメンテされていて、Cocoapods, Carthage等からのインストールが可能なライブラリです。

↓サンプルを実際に動かしてみた様子 :eyes:

結構色々カスタマイズができそうな感じでした。 :sparkles:

### :computer:環境構築
****
今回は

元記事を表示

iPhone で運転免許証を読み取ってみよう!【ライブラリを使わずに350行の Swift で本籍を読み取る】

前回の [iPhone で運転免許証を読み取ってみよう!【ライブラリを使って】](https://qiita.com/treastrain/items/9025000acec37f77134a) では Core NFC を用いて開発したライブラリ、[treastrain/TRETJapanNFCReader](https://github.com/treastrain/TRETJapanNFCReader) を使って、iPhone で運転免許証を読み取るサンプルを紹介しました。

そして今回はこのライブラリを使わずに、直接 Core NFC を操って運転免許証を読み取ることを目的に記事を書いていきます。

……としましたが、運転免許証の全てを読み取るにはかなりのコード量になるので、とりあえず今の運転免許証には印字されていない「本籍」のみを取得するコードを紹介します。

# 環境
– 開発
– Xcode Version 11.2.1 (11B500)
– Apple Swift version 5.1.2 (swiftlang-1100.0.278 clang-1100

元記事を表示

Support Split Screen Multitasking 〜 回転時のレイアウト崩れ修正でやったこと

クリスマスよりも、Appleの審査休みと年内の最終リリース日の方が気になる季節になってきました。[iOS Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ios)は8日目、@sussan0416が投稿します、よろしくお願いします。

1ヶ月ほど前、縦固定のiPadアプリの改修を担当しました。今日はその時に経験した話です。
至極当然な内容かと思いますが、経験の棚卸しさせてください :pray:

なお、担当した案件の状況は以下のとおりした。

|経過年数|言語|アーキテクチャ|レイアウト|
|:–|:–|:–|:–|
|5年|Objective-C|MVC|コードベースの実装、部分的にAuto Layoutのxib・storyboard|

※この記事で出てくるコードはSwiftです

# Support Split Screen Multitaskingと横画面対応

はじめに、マルチタスクについておさらいしておきます。
iPad向けアプリは、2020年4月までに、マルチタスクへの対応が求められています。

元記事を表示

CLIから新しいアプリを追加するを訳してみた(まだPR出してない)

– この記事は Bitrise Advent Calendar 2019 の7日目の内容です

### はじめに
Twitter をみてると、[Bitrise JPNさんがアドベントカレンダー作ったよ](https://twitter.com/BitriseJ/status/1202585443101020161) と流れてきたので参加しました。
とても良いサービスだと思うので書いてみました。
誤記などお気軽にご指摘ください。
公式リファレンスは「[Adding a new app from a CLI](https://devcenter.bitrise.io/getting-started/adding-an-app-from-a-cli/)」

### TL;DR;
– Bitrise CLI からアプリを追加する方法
– __[Bitrise Advent Calendar 2019 参加者にはスペシャルな?ギフトあり!?](https://twitter.com/BitriseJ/status/1202585443101020161) __

### 書かないこと
– Bit

元記事を表示

CloudFirestoreでアプリ設計してみた(初心者)

アドベントカレンダー初参加なので、お手柔らかにお願いします。
この記事は、Firebase #2 Advent Calendar 2019の8日目の記事です。

## まずどんなアプリか

一言で言うと、「朝、友人が起きてるか分かるアプリ」です!

複数人(友人)で予定(グループ)を作り、
各々が起床時間を設定して、その時間に起きてるかどうかを予定詳細画面で確認できる。
みたいな感じです。

起きてるかどうかの判定としては、

①起床時間を設定

↓※起床時間に通知を飛ばす。(起きてる〜?)

②通知を踏む or 通知後にアプリを開く (起きてる判定完了)

起きてる場合にはユーザーに起床済みのチェックがつく。

アプリの説明はこんな感じで実際にやっていった内容に入っていきます。

## 昔の反省

実はCloudFirestoreでアプリ作るのは2回目なんですね・・・。

### クソアプリ(Booze!)
https://apps.apple.com/jp/app/booze/id1445135576

1回目に作ったアプリは社会人になり、RDBをかじっていたので、ドヤ顔

元記事を表示

【iOS】実機のiOSだとクリックイベントが動作しない件でハマった【Safari】

#経緯
エミュレータでは動作していたクリックイベントが実機のiPhoneで動作確認した際、動作せず…
中々デバッグが難しいという状況もあり、Google先生に聞きまくることにしました。

#結論
ルート要素にbodyやdocumentなどを指定し、クリックを想定していないタグのidやclassに対してイベントを付与していたため。
(divタグ、pタグ、spanタグなどに対してイベントを付与すると起こる)

#実装
テンプレート側

~~~index.html

~~~

変更前

~~~controller.js
$(‘document’).on(‘click’,’.icon .open’,function(){
open();
});
~~~

変更後

~~~controller.js
$(‘.contents’).on(‘click’,’.ico

元記事を表示

iOSのARKitを使いこなしたい

# はじめに。

ARKitが提供されたのが、iOS11から。(iOS11: 2017/9/20)
そのARKitも3.0まで発表され、多くのことができるようになりました。

ARを使いこなせるようにするために、**ARKitとARKitに関連したSceneKit・SpriteKitの概要やそのフレームワークらを使用する上で理解しておきたい用語・技術**を記しておきます。

(あくまで自分用に書いているため、少し解釈が違う部分があると思います。できるだけ他の人にもわかりやすいように努力していますが、わかりずらかったり違っていたらごめんなさい。。。)

# Sample
– [ARKit1.0 SampleCode](https://github.com/shu223/ARKit-Sampler)
– [ARKit2.0 SampleCode](https://github.com/kboy-silvergym/ARKit-Emperor)
– [ARKit3.0 SampleCode](https://github.com/1901drama/ARKit-Invader)

# AR

元記事を表示

iOSでちょっと多めのツールアイテムに対応可能なツール選択 UI Component

# SegmentedToolControl

お絵描き系のアプリや画像編集系のアプリを作成する時、多くのツールを用意したい場合があったりします。そんなツールを選択させたい場合に、`UISegmentedControl` を使いたいと思うことがあるかもしれません。ただ、`UISegmentedControl` はアイテムを横に並べるのは得意ですが、アイテムを縦に並べる事は正攻法ではできません。よって画面の横側に縦に並べたようなデザインにしようと思うと困ってしまいます。

また、画面のサイズの都合もあるので、アイテムの数が増えると、ずらずらと一列に並べるというわけにはいきません。アイテムをある程度グループに分類して、多段階的に選択できれば、画面の表示領域を節約できます。

今回はこんな目的の為に、必要に迫られて書いた `SegmentedItemControl` を公開できるように少々手を入れたので、紹介したいと思います。

`SegmentedToolControl` は GitHub より取得可能です。
https://github.com/codelynx/SegmentedToo

元記事を表示

ARKitのはじめかた その2「オブジェクトを配置する(ARKit1版)」

# はじめに
こちらの続きです▶︎ [ARKitのはじめかた その1「5分で出来るARアプリ」](https://qiita.com/1901drama/items/c0eb01b16370c48f84cd)

こんにちは!
[ARKitのまとめ記事](https://qiita.com/1901drama/items/cc9f598e3808fe7e32cb) にて書いた実装方法について
先ずはARKit1時代に使われていた「オブジェクト配置の方法」を書きます。
とはいえ、今もよく使う方法なのでモジュール的な感じで参考にして頂けると幸いです。

# ゴール
タッチした場所に飛行機が出てきます。
![iOS のファイル.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222377/4b6ed8a2-0bd5-2723-c37a-9de40ac6dbc1.gif)

# 前提
[ARKitのはじめかた その1「5分で出来るARアプリ」](https://qiita.com/1901drama/items/

元記事を表示

Xcode11.1のローカライズではめられた!

# はじめに
Xcode10系から11系にあげてしばらくしてから下記のような画面を見つけた。

en_bug

??日本語と英語混じってる:scream_cat:

# 現象
なんか同じ画面なのに一部だけローカライズできていない。

理想は下記のような表示。

| 日本語版 | 英語版 |
| — | — |
|![ja](https://user-images.githubusercontent.com/34936885/70139924-f0622e00-16d6-11ea-9429-20a68cf5afc7.png)|![en](https://user-images.githubusercontent.com/34936885/70139949-fe17b380-16d6-11ea-9e03-0ca4f0c89b

元記事を表示

OTHERカテゴリの最新記事