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

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

React Nativeのメリット・デメリット

#はじめに
先日、React Nativeを使った個人開発アプリをリリースしました。
そこで、この記事ではReact Nativeでアプリを開発してみて良かった点、良くなかった点を紹介したいと思います。

「React Nativeを始めようかな」と考えている人の役に立つことができれば嬉しいです。

#メリット❶ 学習コストが少ない
1つ目のメリットは学習コストが少なかったことです。
私は今回のアプリを開発する前は、JavaScriptのライブラリであるReactでWebアプリケーションの開発を行っていました。
React Nativeはコンポーネントの概念などReactと共通している部分が多いので、非常に開発に取り掛かりやすかったです。
Reactを使用してWebアプリケーションの開発を行っている方であれば、React Nativeの学習は参入障壁が非常に低く、取り組みやすいと感じます。

#メリット❷ コードの修正が簡単
2つ目のメリットはコードの修正が簡単なことです。React Nativeは、ホットリロード機能があるため、自分が書いたコードを保存すれば、自動でリロードしてくれま

元記事を表示

閉じられたネットワーク内のiPadを自動で時刻調整できるように設定する

# 概要

インターネット接続のないLAN内にいるiPadの時刻が徐々にずれてきたので、時刻設定を自動でできるようにしてみた。

MacやiOSで使用するNTPサーバのFQDNは[エンタープライズネットワークで Apple 製品を使う \- Apple サポート](https://support.apple.com/ja-jp/HT210060)で確認できるので、LAN内にDNSサーバとNTPサーバを設置し、LAN内に設置したNTPサーバを指すようにDNSレコードを設定する。

# 設定

閉じられたネットワークとインターネットの両方に接続できるマシンを準備。
今回は下記の設定。

* OS: Ubuntu 20.04.1 LTS
* IP:
* (閉じられたネットワーク側)192.168.20.199/24
* (インターネットに接続できる側)DHCP

## unboundのインストールと設定

今回はDNSサーバとしてunboundを仕様(bindだと設定が面倒すぎた)。

~~~bash
sudo apt install unbound -y
~~~

設定ファイルは下

元記事を表示

【iOS】自社プロダクトを守る。不適切レビューへの対処

リリースしたプロダクトには、ユーザーのレビューが付けられます。

プラットフォーム上に公開するiOSアプリで、悪いレビューがついてしまった際には、
新規ダウンロード数減少への影響を最小限にするため、早めに対応したいものです。

本記事では、PM、PO、ディレクター向けに、
“`削除できるレビュー“`、“`削除できないレビュー“`の違いを、
実経験に基づき気づいたことをまとめます。
(最終的な判断は、Apple側に委ねられるため、明確な基準は不明であると認識しております)

なお、レビューの削除依頼を送る方法に関しては、
[@RIwai] (https://qiita.com/RIwai)さんの、[App Storeレビュー返信機能を試して見る] (https://qiita.com/RIwai/items/437b6afa3f516bfe02c6)をご参照ください。

#三行で

1.プラットフォームの特性を理解する
2.削除依頼が認められるレビューとは(申請後〇〇日以内に削除される)
3.消せないレビューへの対応方法

###1.プラットフォームの特性を理

元記事を表示

guard文まとめてみた

#guard文の役割
想定外の状況が起こった時にその処理から抜け出す役割をします。
#書き方
guard 条件 else {
   条件を満たさなかったときの処理
   break //returnでも良い
} 条件を満たした時の処理
#使ってみた
number2を割る数として割る数に0が入った時、{}内の処理が行われます。
条件式 number2 != 0の時{}外の処理
number2 == 0の時{}内の処理です。

“`swift
guard number2 != 0 else{
answerLabel.text = “割る数には0以外の数字を入れてください”
return
}
kekka = number1 / number2
“`
#参考文献
詳解Swift 第5版

元記事を表示

Flutter入門メモ:開発環境構築編

## 経緯

久々に新規でモバイルアプリでも作ろうかと思い、
一人で趣味で作るレベルだと、Swift・Kotlinでそれぞれ構築するのは掛けられる工数的に現実感が無いので、
1ソース系を試してみようかと。

1ソース系は他にも選択肢がありますが、
React Nativeはなんか好みではないのと、Apache Cordovaは嫌な思い出しかないので、
流行ってるFlutterでやれないかなと、[公式](https://flutter.dev/docs/get-started/install)を見ながら少し試してみる事にしました。
今回は開発環境までのメモ。

## 確認環境

* macOS Catalina
* Essential Essential Phone PH-1 (Android 10)

### 前提

* [Homebrew](https://brew.sh/)がインストールされている。

※今回確認を実施したMacでは、XcodeやIntelliJ、VS Codeが予めインストールされています。

## 手順

Flutterのインストール。

“`shell
$

元記事を表示

swich文について初歩的なことをかく

![スクリーンショット 2020-11-29 8.07.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755375/9e6d7bf1-b26f-224c-7cf5-ff10375baaf2.png)
#swich文の書き方
“`swift
let number1 = Double(number1TextField.text!) ?? 0
let number2 = Double(number2TextField.text!) ?? 0
var kekka :Double = 0
switch calculateSegmentedControl.selectedSegmentIndex{
case 0:
kekka = number1 + number2
case 1:
kekka = number1 – number2
case 2:
kekka = number1 * number2
cas

元記事を表示

【swift】google admobを実装した際に「[UIView setAdUnitID:]: unrecognized selector sent to instance」が出力した場合の対応

swiftでgoogle admobを実装している際に下記エラーが出力した。

##エラー内容
“`swift
Thread 1: “-[UIView setAdUnitID:]: unrecognized selector sent to instance 0x7fce3a70abc0”
“`

![スクリーンショット 2020-11-28 21.34.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60753/885afa85-a38a-6fc2-c217-fcf057fe9f67.png)

##対応方法
広告の枠としたいUIViewと「@IBOutlet weak var bannerView: GADBannerView!」をドラッグアンドドロップなどで紐付けるのだが、その際UIViewのCustom ClassのClass名に「GADBannerView」が記載されておらず実行時エラーとなっていた。

UIViewのCustom ClassのClass名に「GADBannerView

元記事を表示

【swift5】APIを叩くときは「HTTP」を「HTTPS」に直しましょう

※本記事が筆者の初投稿です! 優しい目で参考程度にご活用ください!

#はじめに
なーんにも考えずに、AlamoFireでAPIを叩いたりなどでHTTP通信をすると、
「エラーが出る」とか「想定より少ないデータしか取れない」
って問題が発生したりします。

HTTP通信は暗号化されていない安全性の低い通信のため、
appleがデフォルトでブロックさせています。

この状態でrequestを出しても、セキュリティでブロックされてる状態なので、
responseは返ってきません。
キャッチボールしようとしてるのに、二人の間に壁があるようなものです。
これでは投げても相手に届かないので投げ返してくれませんね。

壁に邪魔されない形式の通信に変更しましょう。

#解決策

例えばAPIを使おうとして、サイトに載ってるサンプルクエリをコピペしてみます。
そうするとありがちなのが以下みたいなURL。
「http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&large_area=Z011」

このデフォルトで文頭が「htt

元記事を表示

【Unity】Unity上からiOS端末の発熱状態を取得する

iOS端末の発熱状態を取得できるAPIが無いか調べていたところ、[ProcessInfo.thermalState
](https://developer.apple.com/documentation/foundation/processinfo/1417480-thermalstate)から取得できることが分かりました。(※ドキュメントを見るに対応OSは`iOS 11.0+`である必要がありそう)

この値を知ることが出来れば、例えば重いシーンなどで状態を見てサーマルスロットリング対策を可変的に機能させる処理を書くことが出来るかもしれません。(e.g. 熱状態がヒドいときに一部の機能のクオリティや更新頻度を下げるなど)

今回はこちらをUnityからも参照できるようにネイティブプラグインも合わせて実装したのでメモ。
[※コードだけ先に見たい方はこちら参照](https://gist.github.com/mao-test-h/f7a6733fc3eea2b73f617717c82d0351)

– Unity 2019.4.15f
– Xcode 12.2

# `Process

元記事を表示

Swiftがこんなに使われる理由

本記事は、swiftって何をするための言語?swiftを使うメリットは?
というプログラミング初心者向けの記事になります。

###<目次>

– 1. swift とは
– 2. swift の特徴

#1. Swift とは

SwiftはiOS、macOS向けアプリケーションの開発言語として
Appleが発表したプログラミング言語です。
swiftの発表後に登場したwatchOSやiPadOSにも対応しています。

**iOS**
-> iPhoneに搭載されているOS(オペレーティングシステム)
**macOS**
-> macに搭載されているOS(オペレーティングシステム)
世の中には、他にもWindows や Linux 、 Android などといった様々なOSが存在します。

#2. Swift の特徴

swiftは、様々な人や企業が利用しています。
当たり前ですが、利用される多くの理由があるからです。

swiftには様々な特徴が存在するのでそれについて紹介していきます。

##2-1. 静的型付き言語

静的型付き言語とは、コンパイル時などの実行前の段階で変数

元記事を表示

iOSアプリエンジニアがM1搭載Macを購入するにあたっての検討事項

こんにちは。iOSアプリエンジニアの @zrn-ns です。

今月上旬、Apple独自チップであるM1チップを搭載したMacが登場しましたね。

発表イベント前までは(どうせ性能はIntelには及ばないだろう…)なんて思っていたんですが、実際はとんでもないバケモノ。
お値段据え置きにもかかわらず、既存のMacの中でも最上位モデルにも匹敵するほどの処理性能を持っている上、消費電力もめちゃくちゃ少ない。これまでのMacの歴史を塗り替えてしまうようなものが出てきてしまいました。

普段iOS開発をしている僕としては、すぐにでも購入して試してみたい衝動に駆られたのですが、いかんせん3機種(MacBook Air/Pro, Mac mini)同時に発売されてしまったこともあり、どのモデルを買うか、どのようにカスタマイズするか、かなり迷いました?

今回は**iOSアプリエンジニア視点で、どのモデルをどんな構成で購入するか**検討していきたいと思います!

# 目次
– [? そもそも今M1 Macを買うべきでないユーザ](#? そ

元記事を表示

Firebase Authenticationを使ってiOSアプリのログイン機能を実装する

最近、iOSアプリにFirebase Authentication を使ってSMS認証を実装する機会がありました。
実際に利用してみた感想としては、`ログイン機能` や `新規会員登録` などの複雑を要する機能を比較的簡単に品質の高く実装できるのでおすすめ出来ると感じました。

## 前提
– Firebase/Auth をプロジェクトに追加し、 `pod install` の実行までが完了している
– まだの方は、[Firebase を iOS プロジェクトに追加する](https://firebase.google.com/docs/ios/setup?hl=ja) を参照し**FirebaseSDKの導入と、Firebase/Authのinstall**をお願いします。
– 各イベントのバインディング処理についてはRxSwift、RxCocoaを利用する
– RxSwiftに関する理解はこちらの記事がおすすめです: [RxSwiftについてようやく理解できてきたのでまとめることにした(1)](https://qiita.com/s_emoto/items/b000a5c

元記事を表示

サーバーサイドエンジニアが知っておくべきiOSアプリのデプロイとかテスト周りの知識をメモる

他にもいろいろ方法あるかもしれない。

## firebase app distribution
– sandboxアプリやqaアプリなどのベータ版アプリのダウンロードはこれ経由で行う

## test flight

– test flightが登録されたアプリを触って試すことができる
– (ややこしい登録なしで)課金も試すことができる
– testerとして招待してもらうことが必要

元記事を表示

モーダル遷移

###ストーリーボードによるモーダル遷移から、前の画面に戻る方法

“`swift
self?.dismiss(animated: true, completion: nil)
“`

####ストーリーボードによるモーダル遷移から、2つ前の画面に戻る方法
“`swift
self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)“`

元記事を表示

classとstructについて【Swift】

# はじめに
`class`と`struct`の違いについて理解が薄かったので、備忘録としての投稿させていただきます。

# `class`と`struct`の定義
### `struct`の場合
“`Swift
struct Human {
let name: String
let age: Int
}
“`

### `class`の場合
“`Swift
struct Human {
let name: String
let age: Int
// プロパティを初期化しないと下記メッセージのように怒られます。
// Class ‘Human’ has no initializers
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
“`

# `class`と`struct`の使い分け
#### 1. `class`と`struct`の大きな違い
* `struct`は値型(継承できない、内部

元記事を表示

Xcode 12 + XcodegenでCycle Inside ______エラーでテストターゲットがビルド通らない問題

# 問題
“`
Cycle inside Tests; building could produce unreliable results. This usually can be resolved by moving the shell script phase ‘[CP] Embed Pods Frameworks’ so that it runs before the build phase that depends on its outputs.
Cycle details:
→ Target ‘Tests’ has copy command from ‘/Applications/Xcode12.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/XCTAutomationSupport.framework’ to ‘/Library/Developer/Xcode/Derived

元記事を表示

PRPreviewViewControllerの再生が一回しかできない

ReplayKitでの画面収録をプレビューするPRPreviewView。
再生ボタンが最初の1回しか表示されない、と思ったら、モーダル表示した時に、再生・停止ボタンとActivityボタンが画面の下に切れてしまっていた。
フルスクリーンでモーダル表示すると、全部表示されます。

“`swift
let sharedRecorder = RPScreenRecorder.shared()

……….

sharedRecorder.stopRecording(handler: { (previewViewController, error) in
previewViewController?.previewControllerDelegate = self
previewViewController?.modalPresentationStyle = .overFullScreen // このラインをプラス
self.present(previewViewController!, animated: true) {
}
})
“`

?

元記事を表示

【第5回】初心者二人で0から麻雀アプリ開発

[第4回はこちら](https://qiita.com/dashun814/items/ab4f7b668fb12cacd2f8)

#改版履歴
2020/11/26 投稿

#第5回会議(2020年11月23日)
今回はいよいよ実装!……に入るための勉強会を実施しました。
これまでは個々に情報収集、学習を行なってきましたが、今回以降は足並みを揃える+毎週の学習時間確保を目的として、定例会議の場で学習した内容の共有をして行く予定です。

###議題

– プロジェクトの立ち上げ
– ヘッダー・フッター表示
– テーブル表示

#形式
今回は最初の勉強会でしたので、どんな形式で、どのように進行したかを残しておこうと思います。

####使用したツール

– google meet
– google スライド
– Xcode

####事前準備

1. お互いに学習テーマを決める
2. 一週間の間にテーマの調査・実装を行い、スライドにまとめる

####当日

1. 順番にスライド発表
2. 質疑応答
3. 課題点整理
4. 次回のテーマ決定

#勉強会
結論から言うと、実装について

元記事を表示

[iOS13]DeprecatedになったkeyWindowの取得方法

# 環境
– Xcode 12.1
– Swift 5.3

# 概要
`UIApplication` のプロパティである `KeyWindow` が
iOS13.0でDeprecatedになっていたので取得方法を修正する必要があります。
[Apple公式ドキュメント – keyWindow](https://developer.apple.com/documentation/uikit/uiapplication/1622924-keywindow)

(今更ですが)

# 取得方法
### 修正前
“`swift
UIApplication.shared.keyWindow
“`

### 修正後
“`swift
UIApplication.shared.windows.first { $0.isKeyWindow }
“`

参照: [stack overflow](https://stackoverflow.com/questions/57134259/how-to-resolve-keywindow-was-deprecated-in-ios-13-0)

元記事を表示

CoreMLモデルのサイズを小さくする量子化でモデルの精度はどう変わるのか

モバイルに載せるなら、モデルのサイズは小さいほうがいいと思う。
量子化とは、重みパラメータを、例えばFloat_32からFloat_16にして早めの桁で切り上げるようにすること。

**実際のモデルを量子化して、どれくらいサイズが小さくなるのか、精度はどう変わるのか、をやってみた。**
![スクリーンショット 2020-11-25 23.04.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/e8dd8d36-17b6-cb55-b97d-f093a4f3c5e9.png)

deeplabv3のxeptionバックボーンバージョンでセマンティックセグメンテーションを比較(背景ぼかし)。

xeptionバックボーンのdeeplabv3のmlmodelのサイズは165.1MB。
MobileNetバックボーンだとModelが8.6MBなので、xeptionの方が精度はずっといいとはいえ、さすがにもうちょっと小さくしたいところ。

#CoreMLModelの量子化の方法

“`shell

元記事を表示

OTHERカテゴリの最新記事