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

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

Flutter で Stateを保持したまま画面切り替えができる BottomNavigationBar や TabBar の作り方

## はじめに

[ユアマイスター Advent Calendar 2019](https://qiita.com/advent-calendar/2019/yourmystar) の6日目の記事です。

ユアマイスターでは、 [あなたのマイスター](https://yourmystar.jp/) でハウスクリーニングや修理などのサービスを提供するプロや職人が利用する店舗向けアプリ「マイスターアプリ」 ([Android版](https://apps.apple.com/jp/app/id1478724946?l=ja), [iOS版](https://apps.apple.com/jp/app/id1478724946?l=ja)) があります。
このアプリでは、Flutterを採用しており、2019年10月にリリースされました。(その他の技術スタックは [こちら](https://yourmystar-engineer.hatenablog.jp/entry/2019/11/25/090000))

このアプリには、 BottomNavigationBar や TabBar など使

元記事を表示

SwiftUIで画像をページングする

# はじめに
今作っているアプリで、Instagramのように写真をページングで表示したいと思い、SwiftUIのCustomViewを作ってみました。

SwiftUIのScrollViewのscrollイベントを検知する方法や、ScrollViewをprogrammaticallyにscrollする方法を見つけるのに苦戦したので、同じことをしたい人にとって きっと役に立つと思います。

# 完成イメージ

![ImagePagerDemo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94278/1d1833ff-9685-61e8-eeff-deefee214e07.gif)

E7系、かっこいい!

# ソース

画像、”e7_square”,”e5_square”,”doctor_yellow_square”は、お手持ちの画像に置き換えてください。

“`ImagePager.swift
import SwiftUI

struct ImagePager: View {

var i

元記事を表示

Xcode の力を借りない Swift の Dynamic Library の作成とビルドを試す

この記事は [ドワンゴ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/dwango) の 5 日目の記事でしたが、遅刻しました :pray:

去年の今頃はサーバサイドエンジニアとして [GraphQL サーバおよびクライアントの設計・開発等](https://qiita.com/tasuwo/items/984e6f594cde94e4224e) に携わっていましたが、今年の6月から iOS エンジニアとして働きはじめました。雑多な技術系のメモは普段は [scrapbox](https://scrapbox.io/tasuwo-ios/) に載せています。

今秋、チームのメンバー数名と [iOSDC Japan 2019](https://iosdc.jp/2019/) に参加し、[Swiftにおけるインポートとリンクの仕組みを探る](https://speakerdeck.com/kishikawakatsumi/swiftniokeruinpototorinkufalseshi-zu-miwotan-

元記事を表示

アンドロイドエンジニアが不足しているという噂について調べてみた

概要

最近アンドロイド開発におけるエンジニアが不足しているという話をよく聞く様になった。特にkotlinエンジニアはグーグルがkotlinファーストを掲げるなど需要がかなり高まってると言われている。しかし、swiftの様に今まで人気がなかったことや、Javaで開発していたことが多かったためkotlinで開発ができるエンジニアの供給が追いついていないのが現状である。売り手市場といわれるAndroidエンジニアのについて、その真相を調査した。

現状の分析

まず、エンジニアの単価をiOSとAndroidで比較してみようと思う。

アンドロイドエンジニアの単価

フリーランスエンジニア運営事務局の調べによると、下記の様になっている。

Android経験1年未満 25万円~30万円/月(週5常駐案件の相場単価)

Android経験1年   30万円~45万円/月(週5常駐案件の相場単価)

Android経験2年   40万円~55万円/月(週5常駐案件の相場単価)

元記事を表示

【Firebase Analytics】Universal Links/App Linksでアプリを起動した回数が知りたい

# はじめに
* この記事は[オールアバウトアドベントカレンダー](https://qiita.com/advent-calendar/2019/allabout)6日目の記事です。
* これまでモバイルアプリ(Android, iOS)の集計にGoogleアナリティクスSDKを利用していたのですが、**[2019年10月にGoogleアナリティクス開発者サービスSDKが終了](https://support.google.com/firebase/answer/9167112?ref_topic=6386699&authuser=1) しました(Googleアナリティクス 360 のユーザーのプロパティには影響はありません)**
* 今後のモバイルアプリ向けの集計は、Firebase SDKを利用して集計する**Firebase Analytics**に移行する必要があります
* [Firebase 向け Google アナリティクスについて](https://support.google.com/analytics/answer/9165830?authuser=1)
*

元記事を表示

ARKitとは何か (ARKit1〜3のまとめ)

# はじめに
こんにちは!
ARアドベントカレンダー1日目です。(いきなり忘れてました。すみません。。。)
カレンダーのいくつか日数が空いていたので、ARKitについては分けて記載していこうと思います。

まず今回は、ARKitの概要についてまとめます。
ARCoreとの比較や技術調査、これからARKitをはじめてみようと思う人向けの記事です。
とりあえず試してみたいと言う方は [こちらの記事(ARKitのはじめかた その1)](https://qiita.com/1901drama/items/c0eb01b16370c48f84cd)をどうぞ。

# ARKitとは
![ダウンロード.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222377/7abc7531-da40-32d6-bde8-99afd54ae516.jpeg)

今更ですが ARKitとは
・Apple社が提供するAppleデバイス用のAR開発ツール
・カメラ越しの画面で、現実に即した3D表現可能にする
・2017年にARKit

元記事を表示

Android / iOS アプリのテスト配布サービスあれこれ(DeployGate、Firebase App Distribution、Bitrise)

この記事は [くふうカンパニー Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kufu)、5日目の記事です。

くふうグループの [Da Vinci Studio](https://da-vinci-studio.com/) では、さまざまな Android / iOS アプリの開発やサポートを行なっています。
そしてふだんから複数のサービスを使ってテスト配布しているので、それぞれのサービスについての感想と使用例を書きます。

**1. [DeployGate](https://deploygate.com/)**
**2. [Firebase App Distribution](https://firebase.google.com/docs/app-distribution?hl=ja)**
**3. [Bitrise](https://www.bitrise.io/)(の配布サービス)**

1 と 2 は [fastlane](https://docs.fastlane.tools/) を使ってアップロ

元記事を表示

iOS13のUISegmentedControlをiOS12風に実装する

##環境
– Xcode11.2
– Swift5.1

## はじめに
今回のXcode11の登場で知らないうちに変わっている、iOSの標準UIの中に `UISegmentedControl` があります。
**世界ーのデザイン会社であるAppleのデザイナーとエンジニアが生み出した標準UIなので、1-2年以内にはこのUISegmentedControlがユーザにとっては標準になる**事なのでしょう。

しかし、**新しいデザインとはそれなりに古い認識や先入観を破壊してくるもの**で
既存のアプリのテイストと合わず、ユーザの反応をきちんと伺うまで、なかなかXcode10.xから離れられないiOSエンジニアの方も居ると思います。

普通にbackgroundColorやtintColorを指定するだけでは中々うまくいかず、すぐに終わるかと思ったら2~3時間程度を要してしまいました。
今回はそう言った場合のあくまで**応急処置** として、iOS12風のUIに見せる方法を紹介したいと思います。

間違っている場合がある場合、遠慮なくコメントを頂けたらと思います。

## iOS13(

元記事を表示

RailsエンジニアがReactNativeエンジニアになるにあたって苦しんだところワースト3

![top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227429/b61cebb7-f2a4-79c0-a694-f48e993cfb1f.png)

# はじめに

こんにちは、株式会社OKANで「おかんPay」というプロダクトのPdMをしながらも、自らバリバリReact Nativeで実装している [かなすぎ](https://twitter.com/OKanasugi) と申します。
元々は、RailsでOKANの社内システムを構築していたサーバーサイドエンジニアだったのですが、志願してReact Nativeを使うアプリエンジニアになってから約半年が立ちました。
そこで、RailsエンジニアがReact Nativeを扱うアプリエンジニアになる時に苦しんだ箇所をまとめることで、自分と同じようにReact Nativeを新たに勉強する人の助けになればと思いながら記事を書きました。

# 想定読者

– Railsエンジニアだが、これからReactNativeアプリもつくってみたいなって思って

元記事を表示

|Swiftでバイナリ???を扱う?!>? 

Swiftでバイナリファイル扱うことはそんなに頻繁にはないと思うのですが、
案件の中でAndroidチームの人が、巨大なJSONファイルをバイナリに圧縮して処理していて、
iOSアプリでも同じようにできるんじゃないかということで、バイナリを扱うことになったので、その知見を残します。

なお僕がやりたかったのは、倍精度浮動小数点数(漢字多すぎですよね)のバイナリファイルを、
Swift上でDouble型の配列に落として使いたい、というのがゴールでした。

※バイナリの絵文字として01が出したかったのですが、?しかなかったので、仕方なく?を使っています。

# x進数のリテラル
バイナリファイルを扱う前に、Swiftのリテラルを確認しましょう。

[2.1.7. 数値リテラル | 基本 | Swift](https://www.studiogalago.com/the-swift-programming-language/language-guide/the-basics/numeric-literals/)

“`swift:x進数
let decimalInteger = 17
le

元記事を表示

SwiftUIアプリ開発実践ポイント

こんにちは、[たなたつ](https://twitter.com/tanakasan2525)です :cat:

SwiftUIが発表されて半年ほど経ちましたね。あっという間に時間は過ぎていき、iOS 13以降じゃないと使えないし、まだ気にしなくていいでしょなんて言ってられなくなるのもあっという間な気がします。

iOS Advent Calendarの5日目ということで今回は、いくつかSwiftUIでサンプルアプリを作ったり、実際にアプリをリリースしたりした中でたまってきた知見を書こうと思います。

SwiftUIは様々なプラットフォームで動きますがiOSアプリに注目し、開発する前に知っておきたい実践的なポイントなどを共有します。

※ Xcode 11.2.1、iOS 13.2.1 での動作を元に記事を書いています。

# SwiftUIの特徴

– 少ないコードでUIを作れる (コードレイアウト)
– 宣言的に記述できる
– Appleのすべてのプラットフォームで動く
– ただし、iOS 13、macOS 10.15、tvOS 13.0、watchOS 6.0以上

元記事を表示

[iOS] Bitriseのキャッシュをできるだけ生かしてCI / CDの高速化を図る

#はじめに
この投稿は[CyberAgent Developers Advent Calendar 2019](https://adventar.org/calendars/3981) 4日目の記事です!

本日はTapple iOSチームに今年加入した、19新卒の @nade が担当します。

今回はTappleのiOSアプリのCIのワークフローをキャッシュをなるべく生かす設定に変えることで、
Bitriseのワークフローを **40%〜50%** ほどの高速化に成功した話を書きたいと思います。

# 高速化前後のワークフロー
現在チームではBitrise上でテストを自動化しています。
ざっくり下記のようなワークフローです。

– リポジトリのクローン
– Homebrewパッケージのインストール(Xcodegen, Linterなど)
– Gemパッケージのインストール(xcov, CocoaPods, danger, fastlaneなど)
– Cocoapodsのインストール
– テストの実行

下記は高速化前のワークフローの実際のサマリー(最後に表示される実行時間)です。

元記事を表示

日本語で書かれたLocalizable.stringをGoogle Translation APIで翻訳してstructファイルを自動作成するツールをgolangで作る

## はじめに

以前Qiitaの記事でも書いた「[Go言語でiOS開発ツールを作成する:Localizable.stringsファイルからenumを生成する](https://qiita.com/BlueEventHorizon/items/88dcea8ceeec2a07f351)」というツールを拡張して、

「日本語で書かれたLocalizable.stringをGoogle Translation APIで翻訳してstructファイルを自動作成するツールをgolangで作る」

ことに挑戦してみました。

“`
挑戦結果のGitHubリポジトリーはこちら
https://github.com/BlueEventHorizon/EnumGenerator
“`

## 結果

例えば下記のようなLocalizable.stringがあったとすると、

“`
“あなたの心が正しいと思うことをしなさい。どっちにしたって批判されるのだから。” = “あなたの心が正しいと思うことをしなさい。どっちにしたって批判されるのだから。”;
“前進をしない人は、後退をしているのだ。” =

元記事を表示

iOS13以降でPush通知が届かなくなってしまったので調査した件について

人生で初めてQiitaに投稿します。
めっちゃ緊張してます。
Qiitaの文字3回うち間違えました。

なお、この記事の元ネタはもともと私が書いていたブログに書いていたものをリライトしたものです。

リライトしているのでこちらの方まだ読みやすいのはわかってますが、それでもほんのちょぴっとでもブログの方を覗いてもらえると嬉しいです。
https://yara-shimizu.com/2019/10/05/ios-ver13/

# iOS13になってPush通知が届かなくなってしまった??
タイトルの通り、iOS13にPush通知が届かなくなったので調べました。

## 環境
Mac Mojave 10.14.6
xcode 11(おそらく10以下でも発生する)
iOS 13.4.1
Objective-C

## 現象
・iOS12以前は正常にPush通知が送れている
・iOS13以降でのみ通知が届かなくなった

## 原因
これが100%原因かどうかはソースを見ないとなんとも言えないですが、私の場合はトークンを取得する次のコードの「description」が原因でした。

“`ob

元記事を表示

FirestoreのArrayContainAnyクエリでタイムラインを実装してみた

## はじめに
初アドベントカレンダー!!

普段はiOS開発のインターンをしながら、個人でコツコツアプリを作ったりしております。

今回はFirestoreのアップデートでArrayContainAnyというQueryが追加され、どうやらタイムライン実装で活躍してくれそうで、自分なりにやってみたので記事にしてみました。

※ 間違えている点や、改善点などございましたらコメントかTwitter(https://twitter.com/yuto_nakano44)
にご連絡いただければ幸いです

## ArrayContainAnyクエリとは
こちらの記事がとても分かりやすかったので詳しくはこちらをみていただけると!↓
https://medium.com/anti-pattern-engineering/待ちに待ったfirestoreにarray-contains-anyとin検索がキタ-1771cbc14724

使い方としては、newsコレクションのsports配列にbasketBallが要素として含まれているドキュメントが欲しい!
となれば下記のようになります↓

“`sw

元記事を表示

Makefileを利用してiOS開発を賢く便利に運用しよう?

## はじめに

[VALU Advent Calendar 2019](https://qiita.com/advent-calendar/2019/valu) 4日目の記事です!
VALU 社として記事を書きたい! と名乗りを上げて2年目になりました。ことしもよろしくおねがいします!

今回は「Makefile を利用して iOS 開発を賢く運用しよう」ということで,`Makefile` の補完機能を用いまして,チームメンバーが快適に,かつ本質に集中できる環境を維持することのできる試みのご紹介です。

## 目次

– [Makefile との出会い](https://qiita.com/YutoMizutani/items/6eea2ffac577ff481039#makefile-%E3%81%A8%E3%81%AE%E5%87%BA%E4%BC%9A%E3%81%84)
– [Makefile によるスクリプト管理は何が嬉しいのか](https://qiita.com/YutoMizutani/items/6eea2ffac577ff481039#makefile-%E3%8

元記事を表示

【Objective-c】AutoLayoutで位置を決める

UIButton、UILabel等はstorybord上で、位置を指定して配置できますが
コード上でもAutoLayoutを使用して位置を指定することができます。

“`
-(void) button_autolayout:(UIButton *)button top:(int)top left:(int)left right:(int)right bottom:(int)bottom {
//AutoLayoutを使用することを指定
[button setTranslatesAutoresizingMaskIntoConstraints:NO];

// 上 位置指定
NSLayoutConstraint* topAnchor = [button.topAnchor constraintEqualToAnchor:self.view.topAnchor constant:top];
// 左 位置指定
NSLayoutConstraint* leftAnchor = [button.leftAnchor constraintEq

元記事を表示

HealthKitで水泳の各ラップのストローク数が取りたい

## はじめに
Apple Watchで水泳のワークアウトが測定できるの知ってました?
![IMG_4193.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103548/c079d85f-acd1-e22e-bbb0-e83b39827933.png)

ワークアウトアプリにプールスイミングがあるので、これを実行しながらプールで泳げば、測定できます。
測定結果はApple WatchとペアリングしているiPhoneのアクティビティアプリで確認できます。
サンプルデータですが、このように表示されます。
![IMG_4195.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103548/de1cdb70-b1f0-2058-7050-77ce347072e7.jpeg)

ラップ数や泳いでいるときの泳法も測定できていて、すごい! てなるのですが、
このアプリでは各ラップのストローク数は確認できません。
HealthKitで取れ

元記事を表示

RxSwift MVVM における ViewModel 設計

自分は RxSwift で ViewModel はどうやって設計していくか下記三つ分けて書いていこうと思います。

– Immutable
– テストのしやすさ
– プロトコルの読み取りやすさ

## Immutable

– 可変を避けるため struct を使う。
– Observable, PublishSubject など値が流れ流けど不可変にする。
– Protocol には var で定義されるが、struct では let で宣告します。

## テストのしやすさ

テストしやすく、 mock しやすくするため、 外部リソースはできれば全て DI できるようにします。
例えばデータ処理、API 叩きなどが書いてある struct や class らはコンストラクタの引数で渡します。
そして、 ViewModel 自身の中身に、全域的なオブジェクトやクラスを直接使用すること、できればしないようにします。

## プロトコルの読み取りやすさ

– インプットとアウトプットを分けて定義する

### RxSwift コンポーネントの使い分け

– インプットは Publis

元記事を表示

apple好きやiOSエンジニアが活用したいよく見る情報リソース

Androidも大切だが、iOSアプリなどは特にレギュレーションが変わったり仕様の変更が激しい。
そんな中で随時情報を追いかけるのは大切なことなので個人的に定期的に参考にしている情報リソースのメモです。
そしてapple好き・ガジェット好きとしての趣味も含まれる。そんな方にオススメ。

## [iPhone Mania](https://iphone-mania.jp/)
その名の通りiPhoneマニア
apple関連のニュースや、レギュレーションの変更、リーク情報、iPhoneの便利機能など満載

## [カミアプ](https://www.appps.jp/)
iPhoneの小技やニュースなど

## [gori.me](https://gori.me/)
iPhone/iPad/Macbookの使い方や最新ニュースなど

## [Akiba PC Watch](https://akiba-pc.watch.impress.co.jp/)
秋葉原のショップでapple商品のオトクな入荷情報など
ガジェット好きにはおすすめ

## [ITmedia News](https://www

元記事を表示

OTHERカテゴリの最新記事