- 1. 【SwiftUI】失敗作を無駄死にさせないシリーズ:NavigationBarもどき
- 2. Swift: クロージャのキャプチャって?パート2
- 3. 【初心者向け】たった三行でiOSの入力系にCSS効かせる方法【iPhone】
- 4. Swift: クロージャのキャプチャって?パート1
- 5. AVFoundationをがっつり使ってすっかりAV芸人になった回
- 6. 独自クラスの配列を指定した要素でグルーピングしてTableViewに表示する
- 7. Flutter 住所 or 郵便番号から緯度経度を取得する
- 8. Xcodeで実機テストができなくなりました。”Command PhaseScriptExecution failed with a nonzero exit code”というエラー
- 9. .gitignore に Pods/ を追記しても反映されない時の対処法
- 10. iOSエンジニア見習いがUIKitのドキュメントを読んでみた。Part1
- 11. Flutterで普通のスワイプで画面をpopする
- 12. iOS14でLaunchScreen.storyboardに設定した画像が表示されない
- 13. 【Mobile】静的セキュリティ解析ツール「MobSF」Mobile-Security-Framework-MobSFの使い方
- 14. UIStoryBoardのIBOutletがnilを返すときの対処法
- 15. 画面遷移について網羅的に整理した (Swift5)
- 16. 画面ごとにオリエンテーションを設定する方法
- 17. [BigQuery]アプリバージョンごとのユーザー比率を取得してSlackへ通知する
- 18. Swiftのキーパスについて
- 19. part1「璃奈ちゃんボード」をiPadだけで自作する
- 20. Xcode シュミレーター @が打てない時の対処法
【SwiftUI】失敗作を無駄死にさせないシリーズ:NavigationBarもどき
# タブバーに合わせて変化するナビゲーションバー
を作成しました。
どうでしょう。下のTabBarに合わせて上のNavigationBarも切り替わっています!
良い感じですよね〜。とても良い感じにできています。通常、ナビゲーションバーは`NavigationView`を使って作っていきますが、私はNavigationViewには画像とテキストを一緒におく方法はないと思い込み、`HStack`などを駆使して「なんちゃってナビゲーションバー」を作成しました。
以下がコードです。(ネタバレですがこれは失敗例です。)
仕組みとしては、NavigationBarViewファイルに、画像とテキストをまだ設定してないナビゲーションバーを作ります。そしてナビゲーションバーを表示したい
Swift: クロージャのキャプチャって?パート2
#はじめに
パート1の続きです。#ネスト関数とクロージャ
前回の例題をネスト関数で置き換えました。結果は全く同じです。“`swift
func maker(_ a: Int, _ b: Int) -> (() -> Int) {
var localvar = 0
func localfunc() -> Int {
globalCount += 1 // globalCountは参照されるだけ
localvar += b // localvar, bがキャプチャされる
return localvar
}
return localfunc
}
“`#メソッドとイニシャライザ
通常の関数と同様に、クラスなどのメソッド、イニシャライザもクロージャとして扱うことかできます。
“`swift
class Friend {
let name: String
init(name: String) {
self.name = name
}
deinit {
【初心者向け】たった三行でiOSの入力系にCSS効かせる方法【iPhone】
【備忘録】
bodyなどのCSSに
“`
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
“`
この3行を追加する:writing_hand:―――――――――――
普段Win環境で制作してるので忘れがち。
抜けたまま実機確認して/(^o^)\となるので、もう大元に入れましょう!
Swift: クロージャのキャプチャって?パート1
#はじめに
今回はクロージャの中でも特に厄介なキャプチャについてまとめてみます。パート1です。#クロージャのメリット
クロージャのメリットはプログラムの実行中にクロージャのインスタンスを作り出し、定数や変数に代入したり、メソッドの引数として渡したりすることでプログラムの振る舞いを動的に変更することができる点です。#クロージャのキャプチャとは
クロージャはよく無名関数と言われますが、常に同じ機能のインスタンスが作られるわけではありません。インスタンスが生成される際、クロージャの外側にある変数の値を取り込んでインスタンスの一部とし、インスタンスが呼び出される時にはいつでも値を取り出すことができます。これをクロージャのキャプチャといいます。#キャプチャを理解する上で重要なこと
#####1.
グローバル変数はクロージャの内部からも変数自体に直接アクセス可能。クロージャの内部から変数の値を変更することもできます。
#####2.
クロージャ式を含むコードブロック内で参照可能なローカル変数は普通にローカル変数として存在している間はクロージャ内からも参照可能で、共通の値が参照、更新でき
AVFoundationをがっつり使ってすっかりAV芸人になった回
畑田です。
ある開発においてがっつりAVFoundation芸人にならねばならなかったのでAppleのAVFoundationのドキュメントを読んで分かったことをまとめてみます。
# captureについて
AVFoundationのcaptureというサブシステムはビデオ、写真、音声を撮影、録音するためのものであり、以下のときに使用されうる。
– アプリに自前のカメラ機能を実装するとき
– 動画や写真を撮影する際にフォーカスや露光、安定性などについて、ユーザーにより直接的に操作させたいとき
– 撮影した写真やdepth maps(なにこれ訳せやん)の保存形式を指定したり、ビデオのメタデータをカスタムしたりしたいとき
– 撮影、あるいは録音デバイスから直接ストリーミングさせたいとき**もし、ユーザーにネイティブのカメラアプリを使用させたい場合は`UIImagePickerController`を用いれば良い点に注意すること。**
captureの主要なパーツはsession, inputs, outputsであり、sessionは**一つ以上のinputと一つ以上のo
独自クラスの配列を指定した要素でグルーピングしてTableViewに表示する
#筆者環境
|MacOS|Xcode|Swift|iOS|
|:–:|:–:|:–:|:–:|
|Catalina(10.15.7)|12.4|5.3.2|14.4|#表示に使うデータを用意
`SampleData`というグルーピングに使う`groupID`と表示用の`title`を持っただけの簡易的なクラスを作成する。
“`swift:SampleData.swift
import Foundationclass SampleData {
let groupID: Int
let title: Stringinit(groupID: Int, title: String) {
self.groupID = groupID
self.title = title
}}
“`#表示に使うテーブルを用意
1. `TableView`を配置していい感じにレイアウトの制約をつける
2. `TableView`上に`PrototypeCell`を配置してインスペクタで`I
Flutter 住所 or 郵便番号から緯度経度を取得する
### Flutterで住所or名称or郵便番号から緯度経度を取得する
検索しても、なかなか出てこなかったのでメモ代わり
https://pub.dev/packages/geocoding
Null Safety 対応バージョン
`geocoding: ^2.0.0`Null Safety非対応バージョン
`geocoding: ^1.0.5`“` dart
final searchWord = ‘東京タワー’;
Listlocations = await locationFromAddress(searchWord);
print(locations.first.latitude); // 35.6585805
print(locations.first.longitude); // 139.7454329final zipCode = ‘105-0011’;
locations = await locationFromAddress(zipCode);
print(locations.first.latitude); // 35.6
Xcodeで実機テストができなくなりました。”Command PhaseScriptExecution failed with a nonzero exit code”というエラー
先日挫折しかけたSwiftでのエラーの解決方法が判明したので、メモとして残しておきます。
“`
Command PhaseScriptExecution failed with a nonzero exit code
“`
まずこんなエラーが出てビルドできなくなりました。“`swift
PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks /Users/◯◯◯/Library/Developer/Xcode/DerivedData/demo2-cuxtcawdfrqcqafwplsfrvhdggep/Build/Intermediates.noindex/demo2.build/Debug-iphoneos/demo2.build/Script-024CAB14D5D4ECD45067AA1C.sh (in target ‘demo2’ from project ‘demo2’)
cd /Users/◯◯◯/Documents/GitHub/demoapp
/bin/sh -c /Users/◯◯◯/Libra
.gitignore に Pods/ を追記しても反映されない時の対処法
iOS のライブラリ管理で最もよく使われる CocoaPods の Pods ディレクトリを git で管理したくない時、
.gitignore のファイルに `Pods/`と記載する。しかし Git のキャッシュが原因で反映されないことがある。
“`terminal
$ cd プロジェクトのディレクトリ
$ git rm -r –cached .
$ git add .
$ git commit -m “.gitignoreの反映”
“`以上でバージョン管理を外せる。
iOSエンジニア見習いがUIKitのドキュメントを読んでみた。Part1
# はじめに
新卒で入社してから1年半、Xamarin.NativeとReact.jsを触っていました。
その後、部署異動をきっかけにiOS/Swiftのエンジニアに転向しました。
今はベテランのiOSエンジニアの方の元でがっつり勉強をしています。
アーキテクチャの設計やプロトコル、デリゲートといったプログラミングの基本的な部分はそこまでつまづかなかったのですが、UIKitの仕様がわかっていないせいでつまずくことが多いと最近気づきました。
そこで、重い腰を上げてUIKitのドキュメントを読むことにしました。
自分と同じ入門者の目線で感想などを載せていくので、今後同じ境遇の方にとって参考になればと思います。# UIKit Framework
まずAppleのドキュメントなんですが、読む気にならないのはなぜなのでしょうか。。
ドキュメントを見てぱっと理解できたことがないということと、あとは玄人しか受け付けなさそうなデザインがそうさせているような気がしますね。。代わってVue.jsなんかは初心者が親近感を持って読みたくなるようなデザインをしているなあと思います。余談はおいておいて
Flutterで普通のスワイプで画面をpopする
Flutterで`Navigator.push(context)`して遷移した先の画面で元の画面に戻るときには`Navigator.pop(context)`をアイコンに設置したりエッジスワイプしたりしますよね。
通常のスワイプでも戻したかったのでやり方を見つけるのに少々苦労しましたがなんとかできました。“`Dart
GestureDetector(
onHorizontalDragUpdate: (details) {
if (details.delta.dx > 18) {
Navigator.pop(context);
}
},
child: ・・・,
);
“`このように`GestureDetector.onHorizontalDragUpdate`を設定して横方向のスワイプをトリガーに`navigator.pop(context)`を実行するようにしました。
`details.delta.dx`はスワイプの速度で、正の向きが左→右です。しきい値として設定した`18`を超えると`navigator.pop(context)`を
iOS14でLaunchScreen.storyboardに設定した画像が表示されない
## 環境
ReactNative 0.63.4
react-native-splash-screen 3.2.0
iOS14~## 問題
スプラッシュスクリーンが今まで問題なく表示されていたが、iOSのみアプリ立ち上げ時に黒い画面しか表示されないようになってしまった。
各種フレームワークで同様の問題が発生しているのでiOS14の問題のようです。
[App running on ios14 shows white screen instead of splash screen #504](https://github.com/crazycodeboy/react-native-splash-screen/issues/504)
[Ios14 splash screen doesn’t show up #513](https://github.com/crazycodeboy/react-native-splash-screen/issues/513)
[[Bug] iOS 14 Launch Screen is not working #9764](https://gith
【Mobile】静的セキュリティ解析ツール「MobSF」Mobile-Security-Framework-MobSFの使い方
## MobSF(Mobile-Security-Framework-MobSF)とは
[MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)は、Android/iOSのペンテスト、マルウェア解析、セキュリティ評価を自動化したオールインワンのフレームワークです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/dc8ddabc-4096-c5f7-1931-c2bc8dcd0a58.png)
静的解析と動的解析を行うことができます。MobSFは、モバイルアプリのバイナリ(APK、XAPK、IPA、APPX)とzip形式のソースコードをサポートしています。
## MobSFの導入方法
### STEP1 Dockerをインストール
[Mac に Docker Desktop をインストール](https://docs.docker.jp/docker-for-mac/install.html)
UIStoryBoardのIBOutletがnilを返すときの対処法
clean build folder!
画面遷移について網羅的に整理した (Swift5)
畑田です。
開発ペース早すぎるので画面遷移についてまとめて時間を潰しています。
全てコードで書いています。## 環境
– Swift version 5.2.4
– Xcode version 11.6## UINavigationControllerで管理する
まず前提として、コードだけで実装する際の画面遷移は`UINavigationController`で管理することによって実現されます。
`SceneDelegate`クラスの`scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)`メソッドの中で初めに表示されるview controllerを設定します。
このときに、初めのview controllerを`UINavigationController`のインスタンスとしてしまい、その`rootViewController`(0番目のview contr
画面ごとにオリエンテーションを設定する方法
畑田です。
ある開発においてview controllerごとにorientationを細かく設定する機会があったので記録に残します。
全てコードで書いています。## 環境
Swift version 5.2.4
Xcode version 11.6## fix application orientation
アプリ全体で画面の向きを固定する場合は、`Info.plist`の`Supported interface orientations`において設定します。
例えば`Supported interface orientations`を`Portrait (bottom home button)`のみにすると、縦画面のみがサポートされますし、`Portrait (bottom home button)`、`Portrait (top home button)`、`Landscape (left home button)`、`Landscape (right home button)`にすると全ての画面の向きがサポートされます。## fi
[BigQuery]アプリバージョンごとのユーザー比率を取得してSlackへ通知する
Android や iOS でアプリでは何度もバージョンアップしてリリースすることが多いです。
ですのでユーザーが最新のバージョンのアプリを使っているかなど、アプリバージョンごとのユーザー比率が気になることがあるかと思います。
最近、アプリバージョンごとのユーザー比率を BigQuery から取得して Slack に通知する仕組みを実装したので、その方法についてご紹介いたします。
実際に実行してみると、以下のような感じで Slack へ通知が行われるようになります。
“`
アプリバージョンごとのユーザー比率 (2021年03月15日)## Android
– 1.2.0 : 57.1% (4)
– 1.1.2 : 14.3% (1)
– 1.1.0 : 14.3% (1)
– 1.0.0 : 14.3% (1)## iOS
– 1.2.0 : 54.2% (13)
– 1.1.1 : 37.5% (9)
– 1.1.0 : 4.2% (1)
– 1.0.4 : 4.2% (1)
“`この仕組みを実装するにあたって、以下の
Swiftのキーパスについて
#キーパスとは
オプショナルチェーンのようにさまざまなインスタンスが互いに参照しあう関係にあった時、あるインスタンスを起点として次々に参照をたどって別のインスタンス参照できることがありますが、そのような経路をインスタンスとして保存したり、関数の引数と指定渡したりすることです。以下は、ある学生sがクラブに所属している場合、そのクラブに顧問の先生がいればその先生の名前を表示するためのオプショナルチェーンによる記述です。
“`swift
if let name = s.club?.teacher?.name {
print(name)
}
“`この記述は変数sに対してのみ有効ですが、Student型のインスタンスならばどれに対しても同様な参照を行うことができます。ここで、次のような記述が可能です。
“`swift
let teacherNamePath = \Student.club?.teacher?.name
if let name = s[keyPath: teacherNamePath] {
print(name)
}
“`この`\Stu
part1「璃奈ちゃんボード」をiPadだけで自作する
#動画
https://www.nicovideo.jp/watch/sm38393401
#はじめに
最近りなちゃんボードを自作する人が増えていますが、マイコンを使ったり、3Dプリンターを使ったりするのは難しそう……~~高校生の璃奈ちゃんがあんな短期間で工作出来るわけないだろ~~、と思う方も多いでしょう。
私もそう思ったので、より現実的に、iPadやiPhoneだけで「りなちゃんボード」を再現(表示)するプログラムを作りました。
コンセプトは、
**誰でも,簡単に,どんな時でも使える璃奈ちゃんボード**です。
使用する言語はpython3.xのみです。#必要なもの
* iOS、iPadOSアプリ「**Pythonista3**」(1200円)
* iPhoneやiPad(原寸大で作るためには9.7インチか、10.2インチ、11インチのiPadが必要)たったこれだけ!
1200円のアプリは確かに高いですが、このアプリを入れるだけでほとんどのpythonプログラムが実行できるので、初心者の方も玄人の方もおすすめです。今回はPythonista に入っているuiモジュール
Xcode シュミレーター @が打てない時の対処法
#Xcodeのシュミレーターで「@」が打てない!!!
iOSのシュミレーターでキーボードから記号を入力すると、不思議なことに`@`が`[`になったり、なんだか色々とおかしくなってた。。。別に`/`とか`:`みたいな記号はユーザー入力で使われることは滅多に無いのでいいんですが、、、
**`@`はログイン周りの処理で使うので、`@`が打てないのは困ります!!**
かといって、シュミレーター内のキーボードを毎回使うのも面倒やし:confused:
#解決法
![スクリーンショット 2021-03-15 22.41.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/b89593a3-3ad5-454f-ad02-7e89c0bfc901.jpeg)`|/O>Keyboard>Connect Hardware Keyboard`のチェックを外す→もう一度チェックをつける
よくわかりませんが、これだけで正常になりました。。。