- 1. VisonProの新しい入力方法を試す。
- 2. [Swift/UIKit]UITextViewにプレースホルダーをつける(超簡単!)
- 3. iOS iDevice
- 4. iOS 脱獄
- 5. iOS クロスサイト スクリプティング攻撃 – XSS
- 6. iOS SQL Injection
- 7. iOS ロギング
- 8. WebdriverIOのAppiumを1.xから2.xへ移行する
- 9. 【TCA】ViewStateを使っている時に@ObservedObjectでViewStoreを使用する
- 10. 【Flutter】1年間頼ってきたサイト3選
- 11. prepareForReuse()内に書くべきこと
- 12. [SwiftUI] スクロールに応じて特定のViewを下げたり上げたりしたい
- 13. UIMenuをUIControl (UIView)から呼び出す
- 14. 【Flutter】Listを操るメソッド3選
- 15. 【Android】定期購読更新日が月末だった場合の挙動の違い【iOS】
- 16. 【Swift】TCAでの2種類のViewStoreの扱い方
- 17. Firebaseを使ったToDoアプリ作成に役立つリンク集
- 18. @Published #SwiftUIの修飾子に関して簡単にアウトプットしてみる
- 19. ViewModel終わった説(SwiftUI)
- 20. VisionProのエミュレーターのインストール方法
VisonProの新しい入力方法を試す。
# はじめに
VisionPro が公開されたとき、なにやら指先を動かすだけで、アプリやウィンドウを操作できるような挙動の動画が公開されました。果たしてあの入力では何をしているのか、実機がなくても検証する方法を見つけたので、その方法について解説します。
エミュレーターのダウンロードの方法については[こちらの記事(VisionPro のエミュレーターのインストール方法)](https://qiita.com/kanakanho/items/4dd7448aad63a6beb20a)にて紹介しているので、よければ参考にしてください。
# 新しい入力方法の概要
空白部分はこれから検証して追記いたします。
| Gestures | action(アプリ毎に任意で設定できそうだけど、純正アプリをみた感じ) |
| – | – |
| Touch | 白いたまのある場所のボタンをタップ |
| Swipe up | 下にスクロール |
| Swipe down | 上にスクロール |
| Swipe left | 左にスクロール |
| Swipe right | 右にスクロール |
|
[Swift/UIKit]UITextViewにプレースホルダーをつける(超簡単!)
# 投稿の経緯
前回投稿した↓記事のTextViewにプレースホルダーを追加実装したので記事にします。プレースホルダーの実装方法を調査すると、少し複雑な方法で実装されている記事が多いと感じました。
今回紹介する方法は`UILabel`を使った簡単な方法なので参考にしていただければと思います。https://qiita.com/ken_sasaki2/items/4b9abb63f1278c301988
# 実装
プレースホルダー(UILabel)をtextViewに配置する“`ViewController.swift
private func setUpPlaceHolder() {
let frame = CGRect(
x: 5,
y: 0,
width: 20,
height: TEXT_VIEW_HEIGHT
)
placeHolder.frame = frame
placeHolder.text = “Aa”
placeHolder.textColor =
iOS iDevice
アプリケーションセキュリティテストを実施するために必要なすべてのアプリケーションやツールのインストール方法を見ていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/a956ac7a-c4d3-72f4-0349-eea915dcbffb.png)
最初のツールは「Cydia substrate」です。これは、多くの調整が壊れたデバイスで動作するために非常に重要です。Cydiaを開いて、サブストレートを検索し、インストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/abcf5aa0-e108-6c17-f9dd-2991d104a2fa.png)ロードされたら、ご覧のとおり、右下隅にある検索に移動するだけです。
今から探しに行きます
![image.png](https://qiita-image-store.s3.ap-north
iOS 脱獄
https://www.jailbreak-me.info/check-jailbreak/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/6c33f6ba-4a8b-64d3-4169-4ff7c8f0bde8.png)ダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/61133546-57cd-8c75-f70a-07715baa490a.png)クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/0b254701-8d6b-cfe0-ed24-c5c30f033ad4.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co
iOS クロスサイト スクリプティング攻撃 – XSS
ユーザー入力を使用したクロスサイトスクリプティング(XSS)について見ていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/e4ad6d33-e102-13ca-40a7-ba2b9b34ad0c.png)
これらのWebビューはモバイルブラウザでWebサイトを読み込むために使用されます。また、アプリケーション内にコードを書き込み、これらのビューを使用してアプリ内でコードを読み込むこともできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/adf8f489-1692-3f37-0834-b851938c6474.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/e0d99aa4-5631-9828-6eed-f93e8d
iOS SQL Injection
iOSアプリケーションにおけるSQLインジェクションに焦点を当て、正しく実行されないクエリが深刻な攻撃につながる可能性があることを説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/6a7dc2c2-3de4-eadd-672e-fe976148f329.png)
登録IDを1に設定し、登録ボタンをクリックすると、「登録が成功しました」と表示されます。
次に、違うユーザー名と「ログイン」をタップしてみましょう。誤った資格情報として認識され、「誤った資格情報です」と表示されます。
正しいユーザー名とパスワードを入力すると、「ログイン成功」と表示され、アプリケーションの機能が正常であることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/2a59123c-281d-c6de-8cc8-8052cd411440.png)![ima
iOS ロギング
「Insect Tech’s iOSアプリケーション侵入テストコース」の別のビデオです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/dd4555a9-a1ee-1c04-99c0-084c092ad349.png)
このビデオでは、意図しないデータ漏洩について説明します。これは以前はサイトチャネルデータ漏洩として知られていました。
アプリケーションがユーザーや他の入力ソースから収集した機密情報を処理する場合、それがデバイス内の安全な場所に配置される可能性があります。しかし、その安全な場所が同じデバイス上で他のアプリケーションからアクセス可能な場合、セキュリティ上の問題が発生する可能性があります。これにより、アプリケーションのコードが攻撃対象となります。この側面から見ると、iOSアプリケーションの場合、データ漏洩のリスクが生じる可能性があります。例えば、ログ、アプリケーションのバックグラウンド動作、キーボードキャッシュ、クリップボードなどが含まれます。このビデ
WebdriverIOのAppiumを1.xから2.xへ移行する
# 概要
この記事はWebdriverIO + Appium1.xをAppium2.xへ移行する際に最低限必要な移行作業をまとめた記事です。# 前提
業務で1年ほど前からWebdriverIO + Appium + XCUITestを用いていました。
しかし、先日突如テストが実行できなくなってしまいました。
原因を調査したところ、XCodeがarm64前提になったことや、Appiumのnpmパッケージに含まれるWebDriverAgentRunnerのtagetがiOS10であり、最近のXCodeでは対応できないことが判明しました。
どうにか1.x系でテストを実行できないか模索できないか試行錯誤をしましたが、結果的に2.x系への移行を決め、移行作業を行いました。https://qiita.com/5enxia/items/3e84b3eaaf54fd8e5f00
# 移行作業
## 1. node_modulesの削除
appiumのドライバーなど依存関係をいったんリセットするためにnode_modulesを削除します。
“`sh
rm -rf node_modules
`
【TCA】ViewStateを使っている時に@ObservedObjectでViewStoreを使用する
# はじめに
おととい、2種類のViewStoreの扱い方を記事にしました。https://qiita.com/SNQ-2001/items/290cabf38b7ea2ed077f
# Reducerはこんな感じ
“`swift
struct Feature: Reducer {
struct State: Equatable {
var text = “Hello, World!”
}enum Action: Equatable {
}
func reduce(into state: inout State, action: Action) -> Effect
{ }
}
“`# 実装
“`swift
import SwiftUI
import ComposableArchitecturestruct ContentView: View {
@ObservedObject private var viewStore:
【Flutter】1年間頼ってきたサイト3選
Flutterを学び始めたエンジニアにとって、1番ネックなのが参考サイトが少ないことですよね。。。
かといって、公式を見ても解決できないし。
そこで、自分がFlutterを学び始めてから1年間の中で、めちゃくちゃお世話になったサイトを3つご紹介します。# 1\. ちょげぶろぐ
Flutter初心者は絶対に見るべきサイトだと思います。https://www.choge-blog.com/
【対象目安】
初心者・中級者【概要】
Widgetの基本的な使い方だったり、汎用性の高いUIの実装方法をこれでもかというくらいわかりやすく教えてくれます。
あまり多くのWidgetを触ったことがない初心者の方が取説として使うもよし、中級者の方が簡単なWidgetを組み合わせて作るUIの参考にしてもよし。
1年経った今でも、あまり触れることのないWidgetの用途を知りたいときや、このWidgetでこんなことできないかな??と思いついた時などにお世話になっています。# 2\. stack overflow
知識豊富なエンジニアたちのナレッジ交換を覗き見してきました。
https://
prepareForReuse()内に書くべきこと
## はじめに
UIKitを利用する以上、 `UITableViewCell` はまだまだ現役と思います。
カスタムセルを作成した際に、初期化処理はとりあえず `prepareForReuse`内に書いておけば良いと思っていたのですが、改めてドキュメントを読むとそういうわけでもなさそうなので書き留めておこうと思った次第です。## `prepareForReuse()` メソッドのドキュメントを読む
https://developer.apple.com/documentation/uikit/uitableviewcell/1623223-prepareforreuse
DeepLでそのまま日本語翻訳すると、
> UITableViewCellオブジェクトに再利用識別子がある場合、テーブル・ビューはUITableViewメソッドdequeueReusableCell(withIdentifier:)からオブジェクトを返す直前にこのメソッドを呼び出します。潜在的なパフォーマンスの問題を避けるために、セルの属性は、アルファ、編集、選択状態など、コンテンツに関係のないものだけをリ
[SwiftUI] スクロールに応じて特定のViewを下げたり上げたりしたい
## はじめに
こんにちは!
アプリ開発が好きで、Swiftの勉強をしている大学生です。
温かい目で見ていただけると幸いです。## やりたいこと
下記のような特定のViewに対して、スクロールに応じてViewをあげたり下げたりするようにしたいです。
個人開発ではCustomTabBarに対して使ってました。(※Twitterでの評判があまり良くなく、廃止しました)## 実装イメージ
1. ScrollViewのoffsetを取得する
1. 取得したoffsetの値に応じてViewを下げるか上げるかを判断する
1. それをView側に通知して、offsetを下げたり上げたりする。このような感じのイメージをを持ちながら、実装していきます。
## 実装
まず[こちら](https://qiita.com/hcra
UIMenuをUIControl (UIView)から呼び出す
## はじめに
[UIMenu](https://developer.apple.com/documentation/uikit/uimenu) iOS13から利用可能なコンテナビューですが、iOS14から `UIButton` や `UIBarButtonItem` に [menu](https://developer.apple.com/documentation/uikit/uibutton/3601189-menu) プロパティが追加されるなど、より簡単に利用できるようになっている印象です。
“`Swift
let sampleMenu = UIMenu(title: “sample menu”, children: [
UIAction(title: “1”, handler: { _ in
// action code
}),
UIAction(title: “2”, handler: { _ in
// action code
}),
UIAction(title: “3”, handler:
【Flutter】Listを操るメソッド3選
未経験にとって、List自体は理解していても、そのListを表示させるために操ろうとすると結構詰まりません??
そこで、1年間Flutterの開発をしてきて、「このメソッド知ってたらなんとなく行けるだろ」ってメソッドを3つ紹介します!# 1\.`map`
Iterableを返却してくれます。 ← Iterableってなんやねん。ってなりますよね最初は。簡単にいうと、forEach文と同じ動きをしてくれていると思ってください。
mapの処理を通ることで、Listのひとつ分の要素を返却する処理を繰り返してくれます。`list.map((e) => e)`にあたるところで、listひとつ分の要素が「e」に入り、
それをTextWidgetで利用することで表示しています。“`dart
Widget build(BuildContext context) {
final Listlist = [‘apple’, ‘orange’, ‘greape’]; return Scaffold(
appBar: AppBar(
【Android】定期購読更新日が月末だった場合の挙動の違い【iOS】
# はじめに
8月は31日まであるので、夏休みが長くて学生は嬉しいですね。
ところで、月ごとの定期購読が29日、30日、31日に更新される場合、次回の更新日は何日になるか皆さんご存知でしょうか。恥ずかしながら、自分は先日改めて聞かれるまで意識したことがありませんでした。
きちんと調べてみたところ、GooglePlayとAppStoreで、月末に定期購読更新をする時の挙動が異なるようです。良い機会なので、二つの挙動の違いをまとめてみました。
## GooglePlayの場合
Googleのドキュメントでは、下記のように記載されています。
https://developer.android.com/google/play/billing/lifecycle/subscriptions?hl=ja
> 注: 定期購入を月の 29 日、30 日、31 日のいずれかに更新するよう設定された場合、うるう年以外の 2 月になると、更新日が 2 月 28 日に移動され、それ以降の定期購入期間中は毎月 28 日に更新されるようになります。同じように 3 月 31 日に定期購入を開始した
【Swift】TCAでの2種類のViewStoreの扱い方
# はじめに
TCAを勉強中で完全に理解しているわけではないので、間違っている箇所があればコメントで教えてください。# Reducerはこんな感じ
“`swift
import ComposableArchitecturestruct Feature: Reducer {
struct State: Equatable {
var text = “Hello, World!”
}enum Action: Equatable {
}
func reduce(into state: inout State, action: Action) -> Effect
{ }
}
“`# 実装1
“`swift
import SwiftUI
import ComposableArchitecturestruct ContentView: View {
let store: StoreOfvar b
Firebaseを使ったToDoアプリ作成に役立つリンク集
# はじめに
備忘録
Firebaseを使ったToDoアプリを作成したときにお世話になったリンク集です。
↓リリースしたアプリhttps://apps.apple.com/app/eternaltododestiny/id6461161622
## ToDoアプリのつくり方
まずこの記事を参考にアプリを作って自分好みに(画面遷移をRouterパターンにしたり、セルを分けたり)作り直していきました。
この記事を見ればTODOアプリはだいたい作れます!!https://zenn.dev/t0_inoue/books/fe8902398314fa7f2545
## ログイン周り
https://dev.classmethod.jp/articles/firebase-authentication-ios/エラーについて
https://zenn.dev/yimajo/articles/11d7a092c647d5
## UITextField の入力を伏字,半角入力にする。
UITextField のプロパティ isSecureTextEntry を true にしま
@Published #SwiftUIの修飾子に関して簡単にアウトプットしてみる
## はじめに
今回は@Publishedに関してアウトプットしていく。
[@State](https://qiita.com/RammaruIshii/items/1faef73952f273090895)と[@Binding](https://qiita.com/RammaruIshii/items/8d67621c12ccb540d152)についても記事にしているので良かったら見てくれ。## 詳細
前提として、@State(値の変更を監視して、値が変更されたらViewの再描画をトリガーする)と似ている。
– オブジェクトの状態を監視し、それに応じてViewが自動的に再描画する(データフローをスムーズに管理)
– 通常、@Publishedは@OvservableObjectを継承したクラスで使用される。
– データモデルやビジネスロジックを表現するクラスでの状態管理に使用される。
## ソースコード
“`swift:Swift// ボタンを押すとインクリメントされて、そのインクリメント状況を表示させる
// Modelの状態管理
// ObservableObject
ViewModel終わった説(SwiftUI)
※先に断っておきますが、この記事には特定のアーキテクチャや手法について、批判したり推奨する意図は一切ありません。あくまでも個人的な意見を多く含み、試験的に行なっている手法を紹介するものです。
こんにちは、[フエルマネー](https://apps.apple.com/us/app/%E3%83%95%E3%82%A8%E3%83%AB%E3%83%9E%E3%83%8D%E3%83%BC/id6446435231)開発者です。
今日はViewModelを使わなくなってきた私の小話をします。# ViewModelとは
SwiftUIではよく、MVVMアーキテクチャというプログラムの構成が用いられています。MVVMとは、以下の3要素に分割する考え方ですね。
– Model(データ構成や処理全般)
– View(実際の画面構成)
– ViewModel(Viewの状態管理とModelへの伝達)それぞれの要素を分けて開発することで、開発生産性あるいは保守性の向上が期待できます。
3要素の意味を簡単にまとめると、Viewは実際に表示される画面の配置、ViewModelはViewの状態
VisionProのエミュレーターのインストール方法
# VisionProのエミュレーターを起動する
## Xcodeベータ版のダウンロードと起動
Macがあれば誰でもVisionProのエミュレーターを触ることができます。
なお、快適な動作には、M2以上、32GB以上が求められる可能性が高いです。一応この検証はM1の16GBで行っていますが、ギリギリ動く感じです。(Intelチップは最適化がされていないのかハイスペックな機種でも動作は難しいです)[シュミレーターはこちらから](https://developer.apple.com/download/all/?q=xcode%2015)
Xcode 15 beta をダウンロードしてください。
**MacのOSが最新じゃないとベータ版のXocdeは起動できないので注意してください。**起動すると、どのOSでの開発をしますか?みたいな画面が表示されるので、VisionProを選択してください。
## エミュレーターの起動
Xcodeが起動したら「Create New Project」を選択