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

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

私がアプリ開発のSESで、面談時に地雷案件をなるべく避けるための確認ポイント7選

私は、客先常駐でアプリを開発、保守するのをメインに5年ほどお仕事してきました。
iOSとAndroidのどちらかを担当して、機能やスケジュールの提案をしつつ、もくもくと開発していることが多いエンジニアです。

常駐のため、現場が変わるごとに面談があり(法律なんか知らん)、その度にやばそうな雰囲気の出てる案件は基本的に避けるようにしています。
現場に入る前の面談で、これを確認すれば、地雷案件を少し回避できるポイントがなんとなくわかってきたので、メモっておきます。
**※あくまで個人的な指標であって、なんの根拠もないです!!**

## 保守案件の場合は、アプリのストア評価を確認

保守案件で、ストアの評価が低いアプリは可能な限り参画を回避します。

理由は、

* ストアの評価が低いものは、内部の品質が基本的に低い
* 新たな開発はできずに、既存バグの修正に追われて疲弊する
* ただのバグ修正ではスキルがつきにくい
* クソコードを見ると発狂する(コントローラにAPIリクエストが入っているとか無理)
* ひどい場合、gitすら使ってない
* その他色々

だからです。
何より、**過去に

元記事を表示

【Swift】画面遷移の方法(俯瞰用)

値の受け渡しや求めるUIに合わせた記述の仕方など、単純に見えてバリエーションの多い画面遷移についてまとめます。
performSegueやら、popViewControllerやら、dismissやら、InterfaceBuilderやら、コーディングやら地味にバリエーションが多くてめんどくさくないですか?
今まで経験則でなんとなく使ってきましたが、詰まってはググってを繰り返していたので一度使い方をまとめたいと思います。
備忘録的な記事になりますが、ご容赦願います。

# 画面遷移で混乱すること
– コーディングとかInterfaceBuilderとか実装方法がいくつかあって忘れる
– 遷移の種類がいくつかあって混乱する(showとかmodalとか)
– 画面間の値の受け渡しでコケる
– 画面から戻るときにコケる
– 上記の組み合わせで実装方法が違って泣く

僕は上記のようなことでよく詰まります。
ですので、以下ではこの辺をなんとなく整理できたらなと思います。

# 画面遷移の実装方法

画面遷移の実装方法は主に以下の三つ。
**A. InterfaceBuilder(ボタン

元記事を表示

【react-native】pod instal 時の glog(0.3.5) でのエラー

## 最初に
新しい MacBook に react-native の環境を構築しようとしたところ謎のエラーが出て…丸1日ハマりました。
![20191126-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486398/5de978c5-e854-1dce-8714-2cd8e24551e8.png)
### 発生したエラー内容

“`shell
Installing glog (0.3.5)
/bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
“`
pod install 時に glog(※) の **ios-configure-glog.sh** にて Windows でも馴染みの **改行コード CRLF で保存されたスクリプトが実行される** ことで解析エラーとなっています。

   ※Google のログ出力用のライブラリ

### 試したこと
他の MacBook 環境では

元記事を表示

【Swift/iOS】CoreLocationで取得した位置情報を住所に変換する

# 概要
下記の記事で説明した位置情報から自然な住所の表記に変換する方法について説明します。
[【Swift/iOS】CoreLocationで緯度・経度を取得して位置情報を表示する](https://qiita.com/vyeah321/items/ec01530012b5b3020301)

位置情報を取得した場所によって地名として取得される情報の粒度が異なるため、地名をつなげるだけでは自然な住所表記にならない場合があります。
具体例としては、下記の実行結果をご覧ください。

# 確認バージョン
Xcode 11.2.1
Swift 5.1.2
iOS 13.2.2

# 要件
1. 地名が丁目や番地まで取得できる場所では丁目や番地までの住所を出力
2. 地名が「〜通り」や「〜道路」などの場合には丁目なしの住所を出力
3. 「〜通り」や「〜道路」は住所に含めない

# 結論
下記のように実装すると要件を満たす住所が出力されました。

“`
//位置情報
let administrativeArea = placemark.administrativeArea == nil ? “

元記事を表示

SwiftUIのTabViewの問題に自作TabView(SwiftUI製)で対処する

# SwiftUIのTabViewの問題に自作TabView(SwiftUI製)で対処する

 

SwiftUIのTabViewには、Tabを切り替えると切り替えた先のタブを再生成するためスクロールした位置や状態を保持しておくことができませんでした。

それに対処するために、今回自作TabViewを作成しましたので、その tipsを共有します。

作成したTabViewを見たい方はこちらから!
https://github.com/tsuzukihashi/SwiftUI_CustomTabBar

また、UIKitのUITabBarControllerを Representaぶる方法もあります。そっちの方がiOS的には優しいかもしてません…

こっちのメリットは、タブ切り替えのアニメーションがいじりやすいのと、オールSwiftUIのモチベぐらいでしょうか…

間違いやアドバイスがあればじゃんじゃんコメントください!お願い致します?‍♂️

Twitter やっています!

色々アプリをリリースしているので一度見て

元記事を表示

【iOS】Xcodeショートカット集  〜今日から始める圧倒的な時短開発〜

Qiita初投稿です!

開発中によく使うXcodeのショートカットをまとめました。
まだたくさんあると思うので、随時追加していきたいと思います。
こんな便利なものもあるよ!というのがあれば是非コメント欄に!

#ビルド&デバッグ

|コマンド|用途
|—|—|
|command + R| ビルド + 実行
|command + B | ビルド
|command + control + R | 実行のみ(前回ビルドしたものを実行)
|command + . (ピリオド) | 停止
|command + shift + K | クリーン

#検索

|コマンド|用途
|—|—|
|command + F| ファイル内検索
|command + shift + F | プロジェクト内検索
|command + shift + O | ファイル名検索
|command + shift + J | 編集中のファイルをナビゲーターエリアで表示

#ファイル
|コマンド|用途
|—|—|
|command + N| ファイル作成

#シミュレーター

|コマン

元記事を表示

[はじめてのiOSアプリ]xcodeで地図アプリを作成(その3)

# はじめに

iOSアプリを作ってみたいけど
何から始めて良いのかわからない

とりあえず、
「やってみました」記事を参考に
地図アプリを真似てみようと思う

という記事の3回目です。

今回は、位置情報を取得します。

# 位置情報の取得
1. CoreLocationをインポート
– 画面左側のファイルツリーから[ViewController.swift]を選択し、画面中央に表示されるエディタで、以下のように修正
– 【なぜ?】
– 位置情報ライブラリ(CoreLocation)を使うことを宣言することで、位置情報取得のプログラムを記述できるようになる

“`swift:ViewController.swift
import UIKit
import CoreLocation // この行を追加

class ViewController: UIViewController {
“`
1. CoreLocation 用の変数を追加
– エディタで、以下のように修正
– 【なぜ?】

元記事を表示

MobileNetV2 サンプルコードを解読

## 概要

数回に渡って、CoreModelの学習モデルのiOSでの使い方について、サンプルコードのCoreMLに関わる部分を中心に解読していく。

・参考URL
https://developer.apple.com/jp/machine-learning/models/#text

今回はMobileNetV2を解読する。

## MobileNetV2

### MLModelセットアップ

“`
// MARK: – Image Classification

/// – Tag: MLModelSetup
lazy var classificationRequest: VNCoreMLRequest = {
do {
/*
Use the Swift class `MobileNet` Core ML generates from the model.
To use a different Core ML classifier model, add it t

元記事を表示

実機iPhoneのSafariでWebインスペクタを使ってデバッグする方法

# 要望
実機のiPhoneで特定のWebページに対し、Webインスペクタで中身を書き換えたり、コンソール経由でスクリプトを叩いて実行した結果を見たい。

-> [Android版](https://qiita.com/unsoluble_sugar/items/981adda77b731d5d94ab)

# iPhoneのSafariにもWebインスペクタがある
iPhone単体では[View Source](https://apps.apple.com/jp/app/view-source/id1041817284)などのアプリを使うことで、Webページのソース確認はできるものの、Webインスペクタやコンソールによるスクリプト実行が出来ない。
スクリーンショット 2019-11-26 16.23.27.png

元記事を表示

UITableViewController の タブボタンをカスタマイズしてみる

# 0.はじめに

UITableViewController のタブボタンを色々とカスタマイズしたかったので、やってみました。

試してみたのは、以下。

* タブボタンのサイズを個別に変更する
* タブボタンの背景色を個別に変更する
* どのタブも初期選択されない様にしてみる

ということで、どのタブも初期選択されない様にしてみた画像が、こんな感じ。

IMG_3332.PNG

本当は、4つタブがあるんですが、表示されていません。

# 1.コード

“`swift:TabBarController.swift
//
// TabBarController.swift
// UITableViewController-Sample01
//
// Created by Kusokamayarou on

元記事を表示

iOS 9 の端末でIn-Houseがダウンロードできない時メモ

iOSアプリをInHouseで配布したのでいざiOS9端末で取ろうとしたら
「アプリ名 は現在ダウンロードできません」 のダイアログが出たのでその原因メモ

## 結論
InHouseのipa置き場に置く、plistファイルのbundleIDが実際のものと違っていた

## 原因
ipaのbundleId
“`jp.bizen.ios.exemple.app-enterprise“`

InHouse plist
“`jp.bizen.ios.exemple.app-e“`

開発途中でbundleIdの管理方法が変わってしまったため起きた。
Xcodeに繋いでログを見ながらインストールしないと気づかなかったです :weary:

## Xcode 11 でインストール失敗のログを読む
1. Xcodeに端末を接続
2. 上部 [Window] -> [Devices and Simulators] -> [Open Console]
3. 右上のフィルタに Failed と入れる
4. ダウンロードを開始する

ずらずら出てくるが

“`
BundleValidator:

元記事を表示

GameControllerを使ってDualshock4でUIViewを操作してみる

iOS13から、iPhoneでPS4やXboxのコントローラーが利用可能になりました。
コントローラーに対応したアプリで利用することができます。

どんなふうに使うのか試しに触ってみました。

### コントローラーと接続する
コントローラーの接続は以下の2つのNotificationでハンドリングすることができます。
[GCControllerDidConnect – NSNotification.Name | Apple Developer Documentation](https://developer.apple.com/documentation/foundation/nsnotification/name/1458856-gccontrollerdidconnect)
[GCControllerDidDisconnect – NSNotification.Name | Apple Developer Documentation](https://developer.apple.com/documentation/foundation/nsnotification/name/

元記事を表示

iOS アプリ公開 スクリーンショットでハマった

![s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182971/a7882722-de33-d992-17a1-50b92f36b2dd.png)

以下のようなエラーができてた

**無効なGeoJSON:ルーティング App カバレッジファイルが無効です。詳細については、次のガイド「Location and Maps Programming Guide」を参照してください。**

原因: Choromeを使っているせい
解決策:safariを利用する

**イメージにアルファチャンネルや透過を含めることはできません。**

Photoshopでpngを普通に保存したら出てきた、どうしよう??
メニュー
⇨ ファイル
⇨ 書き出し
⇨ 書き出し方式
⇨ 透明部ボタンチェックボックスを外す
⇨ 書き出し
![スクリーンショット 2019-10-16 14.13.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

iOS申請→拒否られApple Connectへ修正バージョンを再アップしたが反映されない

# 拒否られたあと、Apple Connectへ新しいバージョンのAppをアップロードするが反映されない時

いつまで経っても反映されないと、バージョンを変えてみたりして再度アップロードするが、反映されない。。。

今回の場合、拒否られたバージョンが、ビルドに赤く拒否られた状態で残っていたので、反映されなかったようです。

拒否られたバージョンをビルドから取り外し(削除)したら、**やっと反映されました**。

なぜ、反映されないのか、教えてくれてもよさそうなのに、と思ってしまいます。

元記事を表示

ホーム画面に追加したspaサイトで遷移すると上部にバーが出るのを消す

iPadでspaで簡単なサイトを作って「ホームに画面に追加」をして疑似アプリケーション化して使っていたのですが、いつのまにか遷移すると「上部にバー」が出るようになってしまいました。「完了」を押すとバー自体は消えるのですが、せっかくの専用端末化が台無しです。ということで調査しました。

![IMG_0002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14768/ab66cd69-6d0f-38ff-b459-abcf6e41f299.jpeg)
※縮めています&ダークモードなので灰色。

# 環境
– iPadOS 13.1.3

たぶん、どこかのバージョンで治る気がしますが…。

# 方法

結論から書くとmanifestファイルを追加します。

“`index.html


TableViewCellをアニメーションで追加/削除する

ViewControllerのボタンをタップしたときにCellを追加したり、削除するのに `tableView.reloadData()` を毎回呼んでも良いのですが、それだとTableView自体の更新が走ってしまう為、更新したCellがチラついてしまいます。UX的にもあまり良くないですし、そもそも見た目的にもイケてないです。そこでアニメーション付きでTableViewを追加する方法はいくつかある中で、一番ポピュラーな方法で `insertRows` メソッド呼ぶというのがあります。

##insert時
“`swift

// insert時
// Begins a series of method calls that insert, delete, or select rows and sections of the table view.
tableView.beginUpdates()
// 挿入したいCellのindexPathを配列の形式で渡す
tableView.insertRows(at: [IndexPath(row: 0, section: 0)], wit

元記事を表示

[はじめてのiOSアプリ]xcodeで地図アプリを作成(その2)

# はじめに

iOSアプリを作ってみたいけど
何から始めて良いのかわからない

とりあえず、
「やってみました」記事を参考に
地図アプリを真似てみようと思う

という記事の2回目です。

今回は、地図を表示します。

# 地図を表示
1. MapKit.framework を追加
– [MyGpsMap]-[Build Phase]-[Link Binary With Libraries]を選択し、[+]をクリック
LinkBinLib.png
– 検索窓に [map] と入力し絞り込み[MapKit.framework]を[Add] で追加
AddMapkit.png【Flutter】VSCode上でIntegration Testを動かす

FlutterのIntegration Testは、[公式のcookbook](https://flutter.dev/docs/cookbook/testing/integration/introduction)に載っている方法をそのまま利用すると、いくつか不便な点があります。

– 毎回コマンドラインから実行する必要がある
– 実行するたびにアプリのビルドが走って時間がかかる
– ブレイクポイントを打ってデバッグすることができない

ということでなんとかしましょう。

対象IDEはVSCodeです。

#参考元

こちらのMedium記事を大いに参考にします。
https://medium.com/flutter-community/hot-reload-for-flutter-integration-tests-e0478b63bd54

内容をザッッッッックリと要約すると

– 通常`flutter drive`は次の2つのプロセスを動かして相互通信させる
– アプリ自体(シミュレーター上)
– テストコード(単なるDartプログラム)
– ならば、

元記事を表示

【Unity】これ以上セーフエリア対応で消耗しないためのアセットを作った【AutoScreen】

**[AutoScreen](https://github.com/su10/AutoScreen)(GitHub)**

![AutoScreen_01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/00c476b7-adc2-a981-8136-ec8d35fd8f28.gif)
![AutoScreen_02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/19666be0-5fd5-2966-300e-6886f7beaf1d.gif)

# はじめに
Unityにおけるセーフエリアの対応に関しては`Screen.safeArea`というAPIがあるのですが、ビルドして実機で呼ばないと端末ごとの値が取れない=エディタ上ではレイアウトの確認ができないという辛さがあります。

最近だとUnite Tokyo 2019でも紹介された[Device Simulator](https://docs.u

元記事を表示

Scoped Model を利用した場合の画面遷移でうまくいったコード例(Flutter)

最近Flutterをいじり始めました。Scoped Modelを利用するとスッキリ書けるので、そのコードを書いたときの画面遷移時に具体的にどうコードを書くとうまくいったかをレポートします。

# [Scoped Model 初めて聞いた方へ]Scoped Model とは

公式のパッケージサイトは下記です。

https://pub.dev/packages/scoped_model

基礎原理の解説について下記記事が参考になりました。

https://qiita.com/hayassh/items/690fa0d6528e056617b5

自分の言葉で書くと、数値や文字列の処理部分とデザインテンプレート部分をModel定義をすることで綺麗に分離ができます。あと、このパッケージは、GoogleのFlutter開発チームが提供してくれているVeggie Seasonsというアプリのコードにも採用されていたので、自分もやってみようと思いました。Veggie Seasonsのコードは以下です。

https://github.com/flutter/samples/tree/mast

元記事を表示

OTHERカテゴリの最新記事