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

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

【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 Foundation

class SampleData {

let groupID: Int
let title: String

init(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 = ‘東京タワー’;
List locations = await locationFromAddress(searchWord);
print(locations.first.latitude); // 35.6585805
print(locations.first.longitude); // 139.7454329

final 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`のチェックを外す→もう一度チェックをつける

よくわかりませんが、これだけで正常になりました。。。

元記事を表示

OTHERカテゴリの最新記事