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

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

CAShapeLayer による図形のストロークアニメーション

iOS で図形を描画したい場合、`CAShapeLayer` を使うと、様々な図形を描画することができます。
また、Core Animation を使うことで、図形をアニメーションさせることができます。

簡単な実例を Xcode の Playground で試してみます。

# Playground の準備

まず、Xcode で iOS 用の Playground を作成して、View を表示します。

“`swift
import UIKit
import PlaygroundSupport

let view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 400, height: 400)
view.backgroundColor = .white
PlaygroundPage.current.liveView = view
“`

View のサイズはなんでも良いですが、とりあえず 400×400 にしておきました。次のように白い View が表示されます。

Playgr</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>iOS</div>
<div class='tag-cloud-link'>CoreAnimation</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/usamik26/items/fa0495de947549387775'>元記事を表示</a></div>
<h3 id=Flutterウィークリー #85

# Flutterウィークリーとは?
FlutterファンによるFlutterファンのためのニュースレター
https://flutterweekly.net/

この記事は#85の日本語訳です
https://mailchi.mp/flutterweekly/flutter-weekly-85

※Google翻訳を使って自動翻訳を行っています。翻訳に問題がある箇所を発見しましたら編集リクエストを送っていただければ幸いです。

# 読み物&チュートリアル

### Flutterオンラインおよびオフライン接続を実装する方法

How to Implement Online & Offline Connectivity in Flutter

Sagar Shendeによるこのチュートリアルで、ユーザーがオンラインまたはオフラインのときにアプリ内の情報を処理する方法を学びます。

### Flutter Webを使用してサーバーにファイルをアップロードする
https://rodolfohernan20.blogspot.com/2019/12/upload-files

元記事を表示

Flutterウィークリー #84

# Flutterウィークリーとは?
FlutterファンによるFlutterファンのためのニュースレター
https://flutterweekly.net/

この記事は#84の日本語訳です
https://mailchi.mp/flutterweekly/flutter-weekly-84

※Google翻訳を使って自動翻訳を行っています。翻訳に問題がある箇所を発見しましたら編集リクエストを送っていただければ幸いです。

# 読み物&チュートリアル

### FlutterモジュールをネイティブのAndroidプロジェクトに追加し、Codemagicでテストする方法
https://blog.codemagic.io/flutter-module-android-yaml/

Flutterモジュールを既存のAndroidアプリに統合する方法に関するSouvik Biswaによるチュートリアル。

### Flutterアプリケーションで複数のテーマを管理する
https://blog.dammak.dev/managing-multiple-themes-in-flutt

元記事を表示

Create MLとCore MLを使って、カメラに写った人が嵐のメンバーの誰かをリアルタイムで判定する

この記事は iOS#2 Advent Calendar 2019 15日目の記事です。
初めて Advent Calendar に参加するので若干の緊張があります笑
よろしくお願いします!※Qiita界隈に愛嬌を振りまいていくスタンス

今回は、「Create MLとCore MLを使って、カメラに写った人が嵐のメンバーの誰かをリアルタイムで判定する」という題でやっていきます。Core MLに興味ある方は、私の他にも @cthxn77r さんや @takashico さんが今年のアドベントカレンダーに投稿されていましたので、そちらもどうぞ!※Qiita界隈に”全力で”愛嬌を振りまいていくスタンス

– [Appleの機械学習がヤバい](https://qiita.com/cthxn77r/items/b6727e6731fe71e2c52a)

– [Swift初心者がCoreMLで機械学習に足を踏み入れてみた](https://qiita.com/takashico/items/91c735f74bfdc5309d16)

#やったこと
以下の動画のようなことができるようになります。

元記事を表示

複数クラスへ同時にデリゲート通知を送る方法

デリゲートによる通知を送る際は通常1個のクラスしか通知先に指定できませんが、複数のクラスへ同時に通知を送りたい場合があるかと思います。
同時に通知を送るにはNotificationCenterを使う方法もありますが、この手法は通知元から受け取ったデータを通知先で判別するのが困難です。一方、デリゲートは通知先へ渡すデータを直接引数に指定することができます。
そこでデリゲートによって複数のクラスへ同時に通知を送る方法を考えてみました。

初めての投稿で、まだ言語の知識も浅いので大目に見ていただけると幸いです。
#デリゲートモデルの定義
##DelegateCenter
通知先クラスのリストを持ち、実際に通知を送るクラスです。

“`objc:DelegateCenter.h
#import “DelegateObject.h”

@interface DelegateCenter : NSObject
@property (nonatomic) id delegate;

– (void)doDelegate;

@end
“`
“`objc:DelegateCenter.m
#i

元記事を表示

パラメタライズドテストのメリット解説(Swift)

## はじめに

本記事は [Swift Advent Calendar 2019](https://qiita.com/advent-calendar/2019/swift) の14日目の記事です。
パラメタライズドテストのメリットについて解説します。

## 注意

本記事は [「YUMEMI.swift #5 ~Free Talk~」のLTで使用した資料](https://gist.github.com/uhooi/6715b32d8e936e122816e2d069a0356c) を元にしています。
LT時は [MarkdownをVimで表示した](https://speakerdeck.com/uhooi/parameterized-test-merit) ので、よかったら併せて見てください。

## 用語

本記事で使う用語を説明します。

|用語|意味|
|:–|:–|
|テストメソッド|自動テストのメソッド|
|テストコード|自動テストのコード|
|プロダクトコード|通常のソースコード。テストコードの対義語として使う|

## あるメソッドのテストケースを考える

元記事を表示

Xamarin.Forms でガワネイティブアプリを作るときのテンプレートプロジェクトを作る1

今年は専ら Angular で Webアプリを作ったり、ガワネイティブアプリを作ったりしていますが Xamarin のアドベントカレンダーと聞いてやってきました。

## 概要

最近は、モバイルネイティブアプリよりも Webアプリ(SPA/PWA)、そしてそれを利用したガワネイティブアプリを推している私ですが、ガワネイティブアプリを作る時の「ガワ」には Xamarin(Xamarin.Forms) を採用しています。

なぜガワネイティブなのか?ネイティブではなく、Web(PWA)でもないのか?については、

* [Angular と Firebase で月間PV1億超えの PWA を作った話 – Qiita](https://qiita.com/MasanobuAkiba/items/d2d4be3f8fd2e23c0c1a)

のエントリがよく解説されていますのでご一読を。私のケースは BtoC ではなく BtoB であるため、全面的に一致するわけではありませんが、内容については大いに同意できます。

ガワネイティブアプリは、Webアプリがネイティブの機能を欲するから採用されるわ

元記事を表示

iPhone で交通系IC(Suica、PASMO、ICOCA、…etc.)を読み取ってみよう!

[運転免許証](https://qiita.com/treastrain/items/58e69a1d82dccde48770)、[物販向け電子マネー(楽天Edy、nanaco、WAON)](https://qiita.com/treastrain/items/f5c518486d19ba3573d3)に引き続き、今回は交通系ICである Suica、PASMO、ICOCA などの残高を iPhone で読み取ってみましょう!

# 環境
– 開発
– Xcode Version 11.3 (11C29)
– Apple Swift version 5.1.3 (swiftlang-1100.0.282.1 clang-1100.0.33.15).
– macOS Catalina 10.15.2(19C57)
– 実機
– iPhone 11 Pro (A2215、MWCC2J/A)
– iOS 13.3 (17C54)

# 実行結果
スクリーンショット 2019-12-15 0.17.57.png【Unity+ARKit3(+PeopleOcclution)】カラスがゴミ袋を回収するクソアプリを作る

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

クソアプリクリエイターの皆さんが知見や学びの深い全然クソじゃないアプリを皆さん生み出していく中、
自分のためだけに勉強がてら新しいiPhone使って作りたいものを作りました:innocent:

ARで認識した床面をタップすると、ゴミ袋が出てきてカラスがせっせと回収に行くアプリです。
ゴミ袋を回収すると、ポイントカウントしていきます。
子供には好評でした。

![コンポ 1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100912/7095dc2b-917e-8a85-1079-548de2b0aeb8.gif)

今回制作したものは時短でやろうと思い、Asset Storeの使用が多いのですが、
Asset Store関連のものを覗いたプロジェクトデータをGithubにアップしたので、合わせて見てみてください

元記事を表示

SwiftUI×HealthKitでiOSデータ入門(後編)

# HealthKitデータ取得 & Firebase 編

ここまで SwiftUI のキャチアップをしつつ[前編](https://qiita.com/_kenken82/private/22df88d1b148739837ea)で環境を構築し,[中編](https://qiita.com/_kenken82/private/f9de71e58be5b57f3634)で HealthKit を利用可能にしました.今回は実際に HealthKit で歩数データを取得します.

## HealthKitで歩数データを取得
前回の記事で権限は得られたのでデータの読み出しが可能となっているはずです.次にデータを取得していきます.少しややこしいです.細かいところは順次付け足していくとして,とりいそぎで書き加えたコードだけを載せます.

DataCollection.swift を編集していきます.body より前に以下の変数を定義していきます.

“`Swift
let type = HKObjectType.quantityType(forIdentifier: .stepCount)!

元記事を表示

FirebaseとUnityの連携 入門(Cloud Storage編)

この記事は、[Firebase Advent Calendar 2019](https://qiita.com/advent-calendar/2019/firebase)の15日目の記事です。

## 概要

以前、『[FirebaseとUnityでアプリ開発(ハンズオンみたいなやつ)](https://qiita.com/gremito/items/dfb2080300955c5d5768)』という記事をアップし、そこでFirebaseとUnityの連携方法を簡単に解説しました。

今回は特定のFirebaseのサービスを扱う際、まずは0から作るのではなく、サンプルを活用してFirebaseとUnityの連携をいち早く体験できる方法のご紹介です。

Unityの場合、AssetBundleをサーバに配置し、`UnityWebRequest.Get`などを使ってAssetBundleデータをダウンロードしますよね。
そのため今回は、[Cloud Storage](https://firebase.google.com/docs/storage/unity/start?hl=ja)を

元記事を表示

最適化から見る、Swiftの / 2 と * 0.5

この記事は、CAM Advent Calendar 15日目の記事です:golf:
前回は @matsuhei さんによる、 [レガシーコードに対する解析ツール(重複コード編)](https://qiita.com/matsuhei/items/a0b73eca764be1ee383a)でした。

## 概要

以前、Swiftのコードを誰かに見せてたときに以下のように指摘されました。

> ここ、 `/ 2` になっとるけど `* 0.5` のほうが速いで

確かに、基本的には割り算よりも掛け算のほうがパフォーマンスがいいです。直に頭で計算するとき、僕も掛け算のほうが計算しやすいです。計算理由にもよりますが、Swiftもその例から漏れないはずです。

ただ、iOSでは本番用のipaを作成するときにはリリースビルド(本番)が行われます。
最適化の側面から見て、コードが一緒になってないかな?と思ったので、検証してみました。

## SIL
Swift Compiler は以下のようになっています。
SS 2019-12-14 14.05.03.</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'>SIL</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/tosaka07/items/6cf6385ba59ea7360b01'>元記事を表示</a></div>
<h3 id=iOS用OpenVPNの設定ファイルの作り方

iOS版のOpenVPNでもOpenVPNの設定ファイルと秘密鍵などをインポートすると使うことができますが、設定ファイルと秘密鍵など複数のファイルに分かれているとなかなか扱いが面倒だと思います。(iTunesのファイル共有を使ってファイルを転送する必要があるかもしれません。)
OpenVPNの設定ファイルには鍵情報を含めることができますが、PCとiOSによって形式が違うため気をつけないとハマってしまいます。(私のことです…)
備忘録も兼ねて残しておこうと思います。

**設定のファイル内に鍵情報が混在することになるため扱いにはご注意ください。**

# TL;DR
“` OpenVPN.ovpn
#通常通り設定する
client
dev tun
#…
#鍵ファイルの指定はコメントアウトするか消す
#ca ca.crt
#cert client.crt
#key client.key

#tls-auth ta.key 1
#tls-auth使っている場合は下記を追記
key-direction 1


—–BEGIN CERTIFICATE—–
CAの証明書

元記事を表示

[Swift] UITextViewに画像を添付する方法

# はじめに

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

普段はiOSエンジニアをやっていて、最近はWebの業務を行なっているのでその辺りについても来週のアドベントカレンダーで話したいと思います。

今回の記事では`UITextView`に`NSTextAttachment`クラスを用いて画像を添付する方法をまとめています。
入力中の文字のpositionなどを取得して、その上下に`UIImageView`を配置するなどといった事をしなくても簡単に実装できるので具体例をまじえて紹介したいと思います。

# 具体例

SNSサービスなどでカメラロールから画像を選択し、テキストと一緒に投稿などを行う場合のUIイメージを想定しています。

## カメラロールから画像を取得

シンプルに`UIImagePickerController`を使うケースです。

“`swift
let picker = UIImagePickerController

元記事を表示

技術メンターシップ制度でのiOSアプリ開発(メンター視点)

## 概要
会社の技術メンターシップ制度で当時入社して3〜4ヶ月の新人エンジニアのメンターを半年程度つとめていました。その過程でiOSアプリ開発を一緒にやっていたのでその時のことについて書きます。

## 技術メンターシップ制度の概要
– 今年から実施
– 実施する目的はメンティーに1人前のエンジニアになってもらうこと
– 定義が曖昧ですが、ざっくり言うと弊社の開発プロジェクトに入った時に先輩の助けがほぼなくてもやれるレベルへの到達を目指していました。 なお、1つのプラットフォームに限った話です。
– 期間は半年間
– メンティー1人につき、メンター1人の体制
– メンティーは半年で達成する目標を立てる
– メンティーは月に1回外部の勉強会に参加する
– メンティーは月に1回Qiitaの記事を投稿する
– 2週間に1回程度メンターとの1on1を実施

## メンティー(新人エンジニア)のスペック
前職はオフィス家具の販売をやっており、Swiftを半年ほど勉強して未経験で転職。
MVCで6〜7画面程度の簡単なアプリは作成した経験あり。
弊社では業務に入ったばかりだったので保守案件で

元記事を表示

Flutter でアプリ開発してみる

# はじめに

個人的にスマホアプリをいくつか作りリリースしているのですが、作ったアプリを友達などに見せると、必ず言われるのが、
「iPhoneで動かないの?じゃいいや」
でした。
自分の周りでは、iPhoneを使っている率が高い気がしますが、実際のところ Android と iOSの日本でのシェア率は、ほぼ[半々ぐらい](http://www.moba-ken.jp/whitepaper/19_chap1.html)のようです。

そのような状況なので、モバイルアプリをリリースする場合は、Android, iOS の両対応が必須です。

ただ、Android と iOS はまったく別物なので、Native なアプリを作るとなると、工数は倍近く掛かってしまいます。

ということで、クロスプラットフォーム対応のフレームワークがいくつかあります。
たとえば、 Xamarin や PhoneGap、うちの会社なら Qt もその一つだと思います。

その中で、最近注目され、実際に使われ始めているものに Flutter があります。
この記事では、その Flutter について紹介致します。

元記事を表示

Xcode 11 の Test Plan を、試しながらゆるく解説

この記事では WWDC 2019 の 「[Testing in Xcode](https://developer.apple.com/videos/play/wwdc2019/413/)」 をベースにして、Test Plan
について調べたことや試してみたことを書こうと思います。すぐに Test Plan を試せるプロジェクトは↓こちら。
https://github.com/akatsuki174/TestPlanSample

# Test Plan の存在意義

例えばローカライズ対応をしているアプリで、開発時のデフォルト言語ではテストがパスしても、別の言語で実行した時に UI 崩れが発生するかもしれない。複数の条件(言語、テストの実行順、サニタイザー、引数や環境変数)を跨いで常にテストを実行することは不具合の発見率を高めることができる。

今までの Xcode でもスキームエディタを使うことによって様々な設定をすることが可能だったが、実行は1回しかできない。一方 Test Plan では設定を変えてテストを何回も実行できるところがメリットになる。

# Test Plan

元記事を表示

【iOS】簡単にKeyboardを表示したときにTextFieldが隠れないようにする

この記事は ZOZOテクノロジーズ #1 Advent Calendar 2019 14日目の記事になります。
昨日の記事は @hkame さんによる「[Aurora->CloudSQLへMySQLレプリケーションはできるのか](https://qiita.com/hkame/items/9cff6117bc1763ac7810)」でした。

# はじめに
本記事はKeyboardを表示したときにTextFieldが隠れてしまわないようにするための実装についてです。
TextFieldが隠れないようにする実装のやり方は色々あると思いますが、本記事ではFrame計算などのない簡単な方法を紹介したいと思います。

# 結果
このような動きになります。
日本語キーボードにしてキーボードの高さが変わってもTextFieldの位置が変わっているのがいいですね。

![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308861/785caf6e-31f7-1c01-2b30-0043416338d4.g

元記事を表示

UIColor から CIColor に変換するときの注意

# 前提

UIColor から CIColor にする方法は2種類あります

“`swift
# 変数 color は UIColor のインスタンスとする

# initializer
CIColor(color: color)

# property
color.ciColor
“`

# 注意

`color.ciColor` で取得する時、 `color` が Core Image でイニシャライズされたものでない (= `CIColor` で作成されてない) 場合は例外を返されます。
公式ドキュメントにはかいてありますが、抜け穴だと思います。

> This property throws an exception if the color object was not initialized with a Core Image color.

# 結論

基本的に `CIColor(color:)` の方を使っておけば問題ない。

# 環境

– Swift 5

# 参考

– https://stackoverflow.com/a/42287529
– https

元記事を表示

Flutter Interact 2019のまとめ

# はじめに
この記事は[Flutter #2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/flutter-2)の11日目分です。

今年もすぐに枠が埋まってしまっていたのでFlutter Advent Calendarに参加する予定はなかったのですが、ふとカレンダーを覗いていみると11日枠が投稿されずに空いていたのでちょうどFlutter Interactが開催されたので急遽この記事を書くことにしました。

Flutterの最新情報に興味がある方はFlutterウィークリーもよかったらご覧ください
https://qiita.com/tags/flutterweekly

# Flutter Interact 2019とは
https://developers.google.com/events/flutter-interact

> Flutter Interact is a day dedicated to creation and collaboration with the world, inspi

元記事を表示

OTHERカテゴリの最新記事