- 1. 【Flutter】アプリ開発_初心者のアプリをプロっぽくする最強のpackegeを紹介
- 2. iOSの各種ログ収集方法におけるOSLog等のログ出力関数によるログの可視性調査
- 3. iOS アプリのテストカバレッジ周りでクラッシュしたメモ
- 4. AppStoreをスクレイピングしてレーティングをSlackへ定期通知する
- 5. iPhoneショートカットアプリのメディア音量変数が取得できない
- 6. iOS 13.3.1 dyld: Library not loaded の私的回避法
- 7. UIImageViewのdraw(_ rect: Rect)は呼ばれない
- 8. FlutterとFirebaseで開発した 英語の瞬間翻訳トレーニングアプリ Lala の技術
- 9. エンジニアがデザインを正確に確認する方法
- 10. 【SwiftUI】1-2 Building Lists and Navigation を噛み砕いていく【チュートリアル】
- 11. Multipeer ConnectivityによるiPad間通信で早押しボタンを作った
- 12. Objective-CからSwiftへの移行でfailed to emit precompiled header ‘(略)/MyprojectName-Bridging-Header-swift_xxx.pch’ for bridging header ‘(略)ModuleName-Bridging-Header.h’
- 13. 【iOSアプリ】Guideline 1.1 – Safety – Objectionable Content / 名実ともに糞アプリ【AppStore審査】
- 14. 【Swift】Structでもmutatingじゃないメソッドなら再帰できる
- 15. iOSアプリ開発 デザインパターン入門を読んで
- 16. SwiftUIで作るドラえもん【顔編】
- 17. [Xcode]ディレクトリをターミナル にドラッグ&ドロップすれば絶対パスが表示される
- 18. Google Maps iOS Utils でマーカーをまとめて表示する
- 19. Debug areaにerror: module importing failed: Missing parentheses in call to ‘print’. Did you mean print(‘Whoops! You are missing the
- 20. CustomCellに値を代入したときにFatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: custom cell: file xxxというエラーが出た
【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.logfunc 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 スプレッドシートを作成し、ツール > スクリプト エディタを選択### スクリプト エディタでコーディング
iPhoneショートカットアプリのメディア音量変数が取得できない
結論:メディア音量変数は相変わらず取得できないが、
ShortcutsGalleryというコミュニティサイトにある、
良い感じのショートカットを流用して、目的を達成できる!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」から始めてください
**該当ページからプロジェクトファイルをダウンロードしないと、できない演習がありますので、毎回必ずダウンロードし
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
iOSアプリ開発 デザインパターン入門を読んで
# 目次
第1章 前準備 ~おすすめ書籍
第2章 前準備 ~オブジェクト指向とは
第3章 前準備 ~プロトコル指向とは
第4章 前準備 ~入門書には書かれていないが重要なiOS開発Tips
第5章 Model View Controllerデザインパターン
第6章 MVCでタスク管理アプリを作ろう
第7章 Model View ViewModelデザインパターン
第8章 MVVMでGitHubクライアントアプリを作ってみよう# 第1章 前準備 ~おすすめ書籍
学習者のレベル別で技術書を紹介している。# 第2章 前準備 ~オブジェクト指向とは
オブジェクト指向、継承の概念を図を使って解説していて、初心者の方には分かりやすいだろうなぁと思いました。
継承のメリット、デメリットに関しても説明されており、再確認できてよかったです。# 第3章 前準備 ~プロトコル指向とは
オブジェクト志向のデメリットを何がデメリットかをはっきりさせて解説した上で、そのデメリットをプロトコル志向がどう解決したか解説されていて、理解しやすかったです。# 第4章 前準備 ~入門書には書かれていないが
SwiftUIで作るドラえもん【顔編】
# はじめに
日曜日で暇なので, SwiftUIを使ってドラえもんを作ってみました.この記事で完成するドラえもんは以下の画像です.
口を開けているドラえもんは難しそうなので断念しました.
かなり本物に近くないですか?笑さぁ作って行きましょう.
# 土台づくり
まず,以下の画像のような土台となる青の円とその中にある円から作って行きましょう.
ドラえもんって意識してませんでしたが,地味に楕円なんだと感じました.
確かによくよく見たら楕円なんですよね.土台の色のみ,Asset Catalogで色を管理しています.
(鼻も管理した方が良さそう…)[Xcode]ディレクトリをターミナル にドラッグ&ドロップすれば絶対パスが表示される
Project Navigatorのgroupからターミナル にドラッグ&ドロップすればgroupまでの絶対パスが表示されます。
## こういう時に便利
– Xcodeを開いていてさくっとルートディレクトリにファイルを作りたいとき。
– `Podfile`や`Cartfile`などこのままではルートディレクトリでは無いので先頭のパスを消す必要があります。
“`
$ cd /Users/[UserName]/iOS/[Project Name]/[Project Name]⬅︎先頭のパスが不要
“`
Google Maps iOS Utils でマーカーをまとめて表示する
Google Maps SDK を使用していてマップ上にマーカーを立てることはよくあると思います
ただ、マップ上にマーカーをたてすぎると、広域表示にした際にマーカーが密集しちゃって見辛くなってしまうってこともよくあると思いますそんな時マーカーを1つにまとめたいなーと思ったので、その実装方法を残しておきたいと追います
![GrWyuKwR.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53717/1adb1bac-7d9e-de26-b807-cc4172bfaedf.gif)
# 開発環境
Xcode:11.1(11A1027)
Swift 5
iOS:13.1
CocoaPods: 1.8.0# 実装
## ライブラリのインストール
Google Maps iOS Utils をインストールするために CocoaPods を使用します
以下のように Podfile を編集し、 `pod install` を実行してください“`
target ‘YOUR_APPLICATION
Debug areaにerror: module importing failed: Missing parentheses in call to ‘print’. Did you mean print(‘Whoops! You are missing the <' + arg.argName + "> argument.’)? (fbildb.py, line 98), File “temp.py”, line 1, in と表示されるとき。
Debug areaにいつのまに次のエラーが表示されるようになった。
## 環境
Xcode11.1
Swift5.0
chisel 1.8.1## 結論
上記のエラーは`chisel`を利用していたため、起きたものでした。
Xcode11ではエラーがあるとissueがあがってました。– [Xcode11 error: module importing failed: Missing parentheses in call to ‘print’ · Issue #272 · facebook/chisel](https://github.com/facebook/chisel/issues/272)
`v2.0.0`では解決されているとの
CustomCellに値を代入したときにFatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: custom cell: file xxxというエラーが出た
nibで作成したCustom cellに値を入れようとした時に次のエラーが出ました。
“`
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: custom cell: file xxx
“`## 結論
– tableViewのregisterメソッドが間違っていた。
“`:before
tableView.register(UserSearchCell.self, forCellReuseIdentifier: UserSearchCell.className)
“`“`:after
tableView.register(UINib(nibName: UserSearchCell.className, bundle: nil), forCellReuseIdentifier: UserSearchCell.className)
“`cellをコードで実装している時は`before`が正しくて、cellをnibで作成した時は`after`でテー