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

iOS関連のことを調べてみた2020年03月05日
目次

スマホ向けセカンドスクリーンという新セグメント

![RoshScreen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19772/7e9dd1ef-576f-aa33-8fd5-e2fd1a0b8908.png)

元記事を表示

【Swift】Navigation Controllerをコードで実装する

Storyboardでいうところの、以下のようなNavigation Controllerをコードで実装する方法をご紹介します

![スクリーンショット 2020-03-05 10.09.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332663/9bef8080-2b6d-8707-a59f-2baedac1cdcb.png)

まず、UINavigationControllerを継承したクラスを作成します

“` NavigationController.swift
class NavigationController: UINavigationController {

override func viewDidLoad() {
super.viewDidLoad()

}
}

“`

AppDelegateに以下のように記述します

“` AppDelegate.swift
class AppDelegate: UIResponder,

元記事を表示

SwiftUIのViewは自分のサイズを自分で決めます

“`text
もと(英語)→

Views Choose Their Own Sizes

外国人なので日本語がおかしいところがあれば是非教えてください。
“`

SwiftUIの紹介記事などでだいたい最初に書かれるのは「ビューは自分で自分のサイズを決め、一回決められたサイズは上書きできません」とのことですが、こんな簡単そうなことでも以外と複雑な闇を隠しています。なぜならその簡単そうな宣言が我らの知っているレイアウトについての全ての常識を変えるのです。

SwiftUIはUIKitやAppKitの考え方とは違いますしメリットとデメリットもありますので時間をかけてちゃんと勉強する価値はあると思います。なのでこの記事ではたくさんのレイアウトの土台になるビューの2つ(ImageとText)を見ながら宣言の深い意味を考えてみましょう。

## Images

まず画像を表示しましょう:

“`swift

struct ContentView : View {
var body: some View {
I

元記事を表示

Carthageを使用したQuick導入でトラブった話(platform ios指定でビルドできない問題)

# はじめに
自分が最近触り始めたプロダクトで謎の設定によりビルドが成功してたのが、自分が触り始めて失敗するようになったので原因を調査した時のメモになります。

# 先に結論
気が早い人向けに事象と解決策を先に記載します。

* 事象:Bitrise上で`carthage update/bootstrap –platform ios`を実行するとQuickのビルドで失敗する
* 解決策1:–platform iosを外す(苦肉の回避策)
* 解決策2:Quickはcarthageからpodsに切り替える

# Carthageを使用したQuickの導入方法
導入方法については[公式のGitHub](https://github.com/Quick/Quick/blob/master/Documentation/en-us/InstallingQuick.md)上にて説明がある通りですが、ここで軽く説明しておきます。

* Cartfile.privateにQuickを追加する(github “Quick/Quick”、github “Quick/Nimble”)
* carthag

元記事を表示

web3swift を使って iOS アプリから Ethereum につないでみるテスト

iOS アプリからイーサリアムにつないでテストするまでの簡単な手順をまとめてみました。
イーサリアムクライアントとして、[**web3swift(matter-labs)**](https://github.com/matter-labs/web3swift) を利用しています。

「ややこしい話は抜きだ!」という方は、[**GitHub**](https://github.com/hakumai-iida/StudyWeb3Swift) に手順後のプロジェクトが置いてあるのでお使いくださいませ。

では、ちゃっちゃといきましょう。

# プロジェクトの作成
**Xcode** を起動して **Create a new Xcode project** から新規プロジェクトを作成します。
![ss000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596438/ade56825-78ec-ed29-7acb-ab86d86d3320.png)

このアプリは画面タップでテストを実行させたいので、タッ

元記事を表示

BitriseからFirebase App Distributionを使ってiOS・Androidアプリを配布する(Fastlaneを利用しない方法)

# 概要

Bitriseから[Firebase App Distribution](https://firebase.google.com/docs/app-distribution?hl=ja) を利用してみたので手順と所感をメモします。
※最近リリースされた、BitriseのWorkflowで利用できるFirebase App Distribution Stepを利用しています。

## 環境
利用ツール
– Bitrise
– Firebase App Distribution

最近Firebase App Distribution Stepがリリースされたことを受け、Fastlane等は用いずにFirebase App Distributionと連携しています。
尚、プロジェクトにBitrise、Firebaseが導入されている前提で書いているため、各ツールの導入方法については言及していません。

## Firebase App Distributionの準備

Firebase App Distributionの公式Docは[こちら](https://firebase.g

元記事を表示

【Flutter】アプリ開発_初心者のアプリをプロっぽくする最強のpackegeを紹介

# はじめに
2020年の元旦からFlutterの勉強を開始し、無事2ヶ月で見た目がそれなりのアプリを作ることができるようになりました。これは、すんごい方々が作ったパッケージを使用したおかげです。今回、私が使ったパッケージ・使わなかったけど、いいと思ったパッケージをまとめていきたいと思います。初心者がそれなりの物を短時間で作るにはすんごい方々が作ったすんごいパッケージをどれだけ知っているか、そしてそれをいかに組み合わせられるかが重要だと思います。下記が私が紹介するパッケージで作ったアプリです。もし、インストールしていただけたら嬉しいです。評価してくださると泣いて喜びます。私のアプリ見ながらだと、よりどこに該当のパッケージが使われているかわかりやすいかと思います。
iOSの各種ログ収集方法におけるOSLog等のログ出力関数によるログの可視性調査

iOS 10から「Unified logging system」というログシステムが導入されていて、ログレベルや変数のプライバシー設定など様々な機能があるため、実際に活用するにあたり詳しい挙動を確認したかったため、その調査結果をメモしておく

# 調査環境
– Xcode 11.3.1
– iOS 13.3

# 調査内容
## ログの種類
`OSLog`に関しては5つのログレベルがあるため、従来のログ出力関数である`print`・`NSLog`と合わせて7種類を比較・調査する

“`swift
import os.log

func outputVariousLogs() {
os_log(“Log test: OSLog / Info”, type: .info)
os_log(“Log test: OSLog / Debug”, type: .debug)
os_log(“Log test: OSLog / Default”, type: .default)
os_log(“Log test: OSLog / Error”, type: .err

元記事を表示

iOS アプリのテストカバレッジ周りでクラッシュしたメモ

特に役に立たない気もするが、自分がハマったところのメモ。

# 起こったこと

シミュレータ上で実行するようにして iOS アプリのユニットテストを実行すると 「EXC_BAD_ACCESS (code=EXC_I386_GPFLT)」 ってエラーでクラッシュが発生した。

![スクリーンショット 2019-12-18 21.31.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5721/f87b133c-0b8f-9612-711d-3750ba51e271.png)

# 調査メモ

* スタックトレースによると `__llvm_gcov_writeout` ってあるので、カバレッジに関係してそう
* 似たような現象として同僚が見つけてくれたページ :
* [Crash when running unit test target using XCode 7 – Stack Overflow](https://stackoverflow.com/questions/32803264/cr

元記事を表示

AppStoreをスクレイピングしてレーティングをSlackへ定期通知する

## 前述
公開しているアプリのレーティングの変化に気づけないため、AppStoreのWebサイトをスクレイピングしてレーティングを取り出しSlackへ通知することにしました

## 実装
### Google スプレッドシートを作成し、ツール > スクリプト エディタを選択

スクリーンショット 2020-03-03 22.15.42.png

### スクリプト エディタでコーディング

スクリーンショット 2020-03-03 22.17.04.png iPhoneショートカットアプリのメディア音量変数が取得できない

結論:メディア音量変数は相変わらず取得できないが、
ShortcutsGalleryというコミュニティサイトにある、
良い感じのショートカットを流用して、目的を達成できる!

Home

iPhone SE:iOS13.3.1

スマホのアプリばり増えたなあ。って整理をしていたら、
ショートカットという見覚えのない子がそこにいた。

これは何だとイジリにイジっていたら、思いの外楽しい。
子供向けのプログラミングスクールで使われる(scratchだっけ?)ような、
図形を動かしてプログラミングを組み立てるようなアプリ。

ショートカットが何ぞやと言う話は他の人に任せておくとして、
(というよりqiita初投稿なので長々と根気強く記事を作成できないのです。許せサスケ)
今回は僕がつまずきにつまずきまくって苦しめられた、
”メディア“”再生“における「音量を設定」アクションの変数についてお話しする。

結論は冒頭で述べたとおり、現在20200303時点では、
0から1までの変数を設定することができないし、
”Volume“という変数名で設定

元記事を表示

iOS 13.3.1 dyld: Library not loaded の私的回避法

iosでchartsを使いたくなったので、cocoapodsでインストールするも、実機テストで
`code signature invalid for “path/to/charts.framework”`
とかのエラーが出て動作しなかったので、
https://github.com/Alamofire/Alamofire/issues/3051
あたりを参考にして、
Podfileの
`use_frameworks!`

`#use_frameworks!
use_modular_headers!`
に書き換えると、今のところうまく動作するようです。
フリーの開発アカウント使ってると起きるようですね。

>”Apple blocked utilizing external frameworks on free accounts with 13.3.1 upgrade. Try downgrading to 13.3.”

>https://stackoverflo

元記事を表示

UIImageViewのdraw(_ rect: Rect)は呼ばれない

`UIImageView` を丸くしたくて

“`swift
myImageView.layer.cornerRadius = myImageView.frame.width * 0.5
myImageView.layer.masksToBounds = true
“`

をいろんなところに書いている。

CircleImageViewみたいなUIImageViewのサブクラスを作って`draw`メソッドをオーバーライドすれば共通化できるんじゃないかと考えて以下のようなクラスを作ってみた。

“`swift
import UIKit

@IBDesignable class CircleImageView: UIImageView {

override func draw(_ rect: CGRect) {
layer.cornerRadius = rect.size.width * 0.5
clipsToBounds = true
}
}
“`

が、丸くならない…

調べてみると[UIImageViewのdrawRectメソ

元記事を表示

FlutterとFirebaseで開発した 英語の瞬間翻訳トレーニングアプリ Lala の技術

どうも、[shohei](https://twitter.com/hobbydevelop)です。

大阪在住のフリーランスエンジニアです。現在はFlutterやReact Nativeを使ってプロダクト開発をしています。

今回はFlutterとFirebaseで開発した英語の瞬間翻訳トレーニングアプリ Lala の技術を紹介します。

アプリはこちらからダウンロードできます(無料でご利用できます)。

・iOS
[https://apps.apple.com/jp/app/id1493691416](https://apps.apple.com/jp/app/id1493691416)

・Android
[https://play.google.com/store/apps/details?id=com.gmail.hukusuke1007.lala](https://play.google.com/store/apps/details?id=com.gmail.hukusuke1007.lala)

## 概要

まずはLalaの概要を紹介します。アプリストアの情報をそのまま

元記事を表示

エンジニアがデザインを正確に確認する方法

# 背景
自分はiOSのエンジニアである。

UI周りの実装を行うときには、デザイナーからデザインデータをもらい、デザインツールでMarginやFontなどを確認しながらデザイン通りに実装を行う。実装が終わったら自分で再度デザインが間違っていないかを確認して、最後にデザイナーに確認してもらう。

しかし、デザイナーの確認のときに高い確率で「元のデザインとここが違うよ〜」ってデザイナーから指摘を受けて修正を行うことが多い。

例えば、「LabelのTextのlign-heightが違う」や「アイコンのbaseLineが少しずれている」などである。デザインデータは細かく見ているつもりだが、見落としてしまうことがある。。。

何度もデザイン確認を行っていたら、実装とデザイナーの時間が勿体ない。

## 書くこと
**エンジニアがデザインを正確に確認する方法について**

# 方法
**デザインデータと実装したスクリーンショットを合わせて、違いがないかを確認する!!**

## 例
赤色の枠のCellを実装する。([元データ – figmaresources](https://www.figm

元記事を表示

【SwiftUI】1-2 Building Lists and Navigation を噛み砕いていく【チュートリアル】

実行環境

– MacOS 10.15.3
– Xcode Version 11.3.1

最初の章「SwiftUI Essentials」は以下の3章からなってます
– Creating and Combining Views
– **Building Lists and Navigation (今回)**
– Handling User Input

今回はAppleさんがスタートファイルを用意してくれているので、プロジェクトファイルをダウンロードして「starting point -> 〜.app」から始めてください
スクリーンショット 2020-02-24 22.48.49.png

**該当ページからプロジェクトファイルをダウンロードしないと、できない演習がありますので、毎回必ずダウンロードし

元記事を表示

Multipeer ConnectivityによるiPad間通信で早押しボタンを作った

#概要
2チーム対抗クイズイベントのために、早押しボタンのiOSアプリを簡単に実装しました。
二台のiPadを用いて、各チームがiPadを早押しボタンとして使います。

iOS端末間のP2P通信を可能にするフレームワーク、Multipeer Connectivityを用いています。
回答ボタンを押した時の時間を端末間で通信し、正確なタイミング判定を実現しました。

画面に出ている数字はスコアカウンターです。

元記事を表示

Objective-CからSwiftへの移行でfailed to emit precompiled header ‘(略)/MyprojectName-Bridging-Header-swift_xxx.pch’ for bridging header ‘(略)ModuleName-Bridging-Header.h’

先週発生してマジで会社辞めようかと思いましたが、なんとか解決しました。
とにかく情報なくて辛かったので、書いておきます。

# 作業内容
Objective-CのClassをSwiftに書き換えるリファクタリングをしていました。
下記の作業内容をしました。

1) 移行先のSwiftのStructを一旦別名で作成
2) 移行先のClassと同名のStructを作成して、1)の記述内容をコピー
3) 1)と移行先のClassを消す
4) ブリッジヘッダーやその他Objective-Cヘッダから消したクラスに関する記述を削除
5) 必要に応じてObjective-C側に記述を追加

# エラー内容
ビルドしようとしたところ、下記のコンパイルエラーで先に進めなくなりました。
Clean BuildやXcodeの再起動、なんならMacBookの再起動までしましたが、ダメ。

“`swift
failed to emit precompiled header ‘/Library/Developer/Xcode/DerivedData/MyprojectName-lajanjvhqjnfjksd

元記事を表示

【iOSアプリ】Guideline 1.1 – Safety – Objectionable Content / 名実ともに糞アプリ【AppStore審査】

#ガイドライン1.1-安全性-不快なコンテンツ
いつもなら4.2.2 **「4.2.2 – Design – Minimum Functionality」**リジェクトを頂くのだが、今回はそれに加えて初の**「1.1 – Safety – Objectionable Content」**を頂いた。
初めてのことだったので検索してみたら、どうも不適切な表現などを含む場合に適応されるガイドラインらしい。

##証拠写真が添付されていた。
不適切なコンテンツなど含むようなアプリは作っていないので何かの間違いだと思ったが、画像が添付されていたので確認してみると

**「○○○」**(ひらがな3文字ですが、伏せ字にしときます。)

というテキストが表示されている画像が添付されていた。

チャットできる機能があるアプリで、そこの画面にデバッグ時にやりとりしたデータが残っていたのだ。
審査前のチェック時には問題なかったのだが、審査提出後にチャット機能を使って遊んだ人がいたらしい。
そしてそのチャットの文面に前述のNGワードが入っており、そこの場面を激写されたという訳だ。

完全にこちらのミスだが、下

元記事を表示

【Swift】Structでもmutatingじゃないメソッドなら再帰できる

気付き、ですね。

# 思い込み
https://stackoverflow.com/questions/36080491/swift-struct-type-recursion

この辺を見て、Swiftで再帰する=クラスを使わなければいけない(Enumは再帰Enumがある?)と短絡的に思っていました。

# 気付き
しかし再帰のときに問題なのは、mutatingなメソッドであって、immutableなメソッドなら再帰できることに気付きました。

# つまり
“`swift
struct Some {
func some(input: String) {
let word = input
if word != “これで終わりや” {
print(word)
some(input: “これで終わりや”)
} else { print(“returnするで”); return }
print(“終わるで”)
}
}

Some().some(input

元記事を表示

OTHERカテゴリの最新記事