- 0.0.1. IQKeyboardManagerを使用する際、特定の画面のみ機能を無効にする
- 0.0.2. [SwiftUI]TextFieldのテキスト入力監視処理のサンプル
- 0.0.3. setup appium in Mac for iOS APP (Monterey)
- 0.0.4. 【Swift】ローカルのHTMLとCSSをWebViewに表示する
- 0.0.5. Bitriseを用いたreact-nativeアプリ (iOS) のCI/CD構築
- 0.0.6. iOS 16:秘密値の保存、FaceID認証に基づく個人情報の表示/非表示(LARight)
- 0.0.7. CocoaPods の利用手引き
- 0.0.8. [SwiftUI / WidgetKit]大きさが異なるウィジェットを設定する
- 0.0.9. SwiftUIで円形プログレスバーを作成する
- 0.0.10. onAppearメソッドとは
- 1. onAppearメソッドとは
- 1.0.1. [SwiftUI / WidgetKit]アプリのボタンをタップしたら、ウィジェットを更新する
- 1.0.2. 配列からランダムに任意の要素を重複なしで取り出す
- 1.0.3. iOSのビルド中に出るエラーでありがちなミス
- 1.0.4. 【Swift】WKWebViewでCookieを取得する
- 1.0.5. 【初学者向け】Ciscoルータをセットアップする前に、まず覚えておくべきコマンド一覧
- 1.0.6. GCP + ネイティブアプリでのGitLab flow構築
- 1.0.7. ITの力でアレはもう少し便利になるかも
- 1.0.8. M1 Cocoapods install
- 1.0.9. 【Swift】スマホを喋らせる(合成音声)
- 1.0.10. Remote Test Kitの実務での使い方と所感
IQKeyboardManagerを使用する際、特定の画面のみ機能を無効にする
IQKeyboardManagerはとても便利なライブラリですが、他UIライブラリとの相性が悪く思い通りに動作しないことがあります。
MessageKitというライブラリを使用した際に、IQKeyboardManagerの機能が有効だったためUI周りの挙動がうまく制御できませんでした。そこでIQKeyboardManagerのdisabledDistanceHandlingClassesを使用し特定の画面のみライブラリの機能が無効になるよう設定しました。
## AppDelegate didFinishLaunchingWithOptions()内に無効化する処理を追加する
**IQKeyboardManager.shared.disabledDistanceHandlingClasses.append(xxx.self)**
“`Swift
func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOpt
[SwiftUI]TextFieldのテキスト入力監視処理のサンプル
`TextField`の入力に`Combine`の`CurrentValueSubject`を使用してその値の変更を購読するという方針で行きます。
### ViewModelの実装
“`TextInputViewModel.swift
import Foundation
import Combine@MainActor
class TextInputViewModel: ObservableObject {
@Published var resultText: String = “”
@Published var inputText = CurrentValueSubject(“”) private var cancellables = [AnyCancellable]()
func subscribeInputText() {
inputText
.debounce(for: 1, scheduler: RunLoop.main)
.remove
setup appium in Mac for iOS APP (Monterey)
# Outline
Monterery Mac環境にて、appiumを用いてiOS NativeAPPのテストを行うための
環境構築に関するものである
なお、iOSのテストを行うには、Apple Developerに登録しているApple IDが必要になる。
使用した端末は iPhone11 iOS15.5 である。# Mac
macOS Monterey version 12.4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/9d27dd94-271a-e1cf-5aea-e2bcee22face.png)
# Java
java 11.0.15
https://www.oracle.com/jp/java/technologies/javase/jdk11-archive-downloads.html
install後、javaのpathを設定する(appiumでは、設定してないと警告が出てしまう)
.bash_profile の場合
“
【Swift】ローカルのHTMLとCSSをWebViewに表示する
# はじめに
今回はローカルにある`index.html`と`style.css`をWKWebViewで読み込む方法を紹介します。
![スクリーンショット 2022-07-19 23.26.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/956022c2-4583-5f1c-d0ac-11ba2e815651.png)# 実装
“`index.html
Document
Bitriseを用いたreact-nativeアプリ (iOS) のCI/CD構築
# はじめに
これは今さらな2021年振り返りカレンダーの3日目の記事です.
[Twitter](https://twitter.com/mahiiiki)も良かったらフォローしていただけると嬉しいです?前回はGCP+ネイティブアプリの構成でGitLab flowを構築するという内容でした.
https://qiita.com/sheep96/items/8937141a9fef047659b3
ネイティブアプリと言ってるくせにそこのCD周りは完全に省略するという半詐欺行為を行って
しまいましたが,今回はそれについて書きます.代表的なネイティブアプリ用のCI/CDツールとしては以下のようなものがあります.
– Bitrise
– Fastlane
– CodeMagic他にも,汎用CI/CDプラットフォームのMacインスタンスを提供しているものを
利用することも考えられます.今回は,採用例や情報が多くreact-native (expo) のビルドも簡単にできそうなBitriseを使用することにしました
(調べていた時はFastlaneを知らなかったのです
iOS 16:秘密値の保存、FaceID認証に基づく個人情報の表示/非表示(LARight)
iOS 16でリリースされた新しいLARightオブジェクトを使用すると、以下のことが可能になります。
– キーチェーンにデータを簡単に保存 (例えば、ログイントークンの保存など)
– 生体認証やデバイスのパスコードによる認証 (例えば、FaceID を使ってアプリの一部のエリアをロックするなど)
– アプリ全体で生体認証のステータスを共有する。
– `.redacted`を使用して、ユーザーが認証していない場合の情報を隠します。![Screenshot 2022-07-19 at 15.55.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/a1b21ca3-5627-ef13-bfb3-5b00e02ef592.png)
![faceid.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/14def33f-0b06-abe2-765d-3f20b8647cc3.png)
# キーチェ
CocoaPods の利用手引き
現在 iOS アプリ開発において、ライブラリの導入には Swift Package Manager が標準となりつつあります。
CocoaPods の利用シーンは減りつつありますが、下位の iOS バージョンサポートや、様々な理由でライブラリのバージョンを上げることができない場面では、まだ利用が必須のシーンもあります。
iOS エンジニアの採用コードチェックにおいても利用されるケースがあって、その場合に警告を無視した状態で提出されることもあります。それに対するフィードバックを書いていましたが、以下の補足として、最初からこういうところに気をつけてほしい内容を記事としてまとめます。
[私が(iOS エンジニアの)採用でコードチェックする時何を見ているのか](https://qiita.com/lovee/items/d76c68341ec3e7beb611)
# チェック項目
– Swift Package Manager で導入できないか
– platform が指定されているか
– ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES が指定されているか
[SwiftUI / WidgetKit]大きさが異なるウィジェットを設定する
## この記事の内容
– 大きさが異なるウィジェットを設定する## 開発環境
|項目|内容|
|—|—|
|PC| MacBook Air (2020 M1)|
|言語|Swift|
|フレームワーク|SwiftUI|
|IDE|Xcode|
|コード管理|GitHub|## コード
“`swift:EmojisWidget.swift
import WidgetKit
import SwiftUIstruct Provider: TimelineProvider {
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> Void) {
let entry = Simple
SwiftUIで円形プログレスバーを作成する
# 環境
– macOS Monteley(12.4)
– Xcode(13.4.1)
– Swift(5.6.1)# 実装
執筆時点で標準では用意されていないようなので、Circleを利用して実装してみました。
あまり一般的ではないと思いますが、逆回転にも対応している実装になります。
~~~ CirclarProgress.swift
struct CirclarProgress: View {
let progress: Int
let color: Color
let isInserve: Bool
let strokeWidth: CGFloat
var lineCap: CGLineCap = .butt
var angle: Double = -90
private var from: Double {
if isInserve {
return 1 – Double(progress) / 100
} else {
return 0.
onAppearメソッドとは
onAppearメソッドとは
Viewが最初に描画された時に呼び出されるメソッド
(要は一番最初に呼び出されるメソッド)“`swift:
struct ContentView: View {
@State private var showMenu = truevar body: some View {
VStack{
if showMenu {
TestView()
}
}
.onAppear {
showMenu = false
}
}
}
“`状態変数showMenu(@Stateって書いてあるやつ)の値がtrueでも、onAppearでshowMenu変数の値をfalseに設定しているので、TestViewが呼び出されることはない。
[SwiftUI / WidgetKit]アプリのボタンをタップしたら、ウィジェットを更新する
## 記事の内容
– アプリ内のボタンをタップしたら、ウィジェットを更新する## この記事で記載しないこと
– App Group の設定
– UserDefaults の使用方法## 開発環境
|
配列からランダムに任意の要素を重複なしで取り出す
# きっかけ
クイズを出題するアプリを作ろうと思ってたときに、ランダムに問題を出題させたいなと思ったのがきっかけです。
## 作った関数
“`dart
import ‘dart:math’ as math; // math.○○として使用するList random(List array,int piece) { // 引数は配列と数値
List randoms = [];
if (array.length >= piece) {
var generate = new math.Random();
for (var i = 0; i< piece; i++) { while (true){ var tmp = generate.nextInt(array.length); if (!randoms.contains(array[tmp])) { randoms.insert(0,array[tmp]);
iOSのビルド中に出るエラーでありがちなミス
![スクリーンショット 2022-07-12 8.46.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/c6a4cb07-91e4-7473-038d-e8dad59f9992.png)
“`
Could not build the application for the simulator.
Error launching application on iPhone
“`
や
“`
Error running pod install
Error launching application on iPhone
“`
に囚われて、それ以外の`error`を見落とすことがある中`null-safety`問題で警告を無効にして解決した時の一文です。
![スクリーンショット 2022-07-12 8.46.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/3746b704-8174
【Swift】WKWebViewでCookieを取得する
# はじめに
いま、私はUIKitの練習としてQiitaのモバイル版を作成してます。
しかし、Qiitaモバイルを作成にあたって問題点があることに気づきました。
Qiitaの公式APIにはタイムラインやトレンドなどを取得できるAPIが存在しません。ではどうするか。
そういう時はCookieを使おう!!
というわけでWKWebViewを使用してQiitaのログイン時Cookieを取得します。# 流れ
Qiitaのログイン画面を表示
↓
ユーザーがログイン
↓
ホームに遷移したらCookieを取得# 実装
今回は`KeychainAccess`を使用してログイン完了時に保存してます。
“`swift
import UIKit
import WebKit
import KeychainAccessclass WebViewController: UIViewController {
var webView: WKWebView!
let keychain = Keychain(service: “com.Qiita”)
var observe
【初学者向け】Ciscoルータをセットアップする前に、まず覚えておくべきコマンド一覧
Cisco ルータをセットアップするとき、最初にどのようなコマンドを知っておくべきなのでしょうか。
本記事はそのような疑問に答えるために、初学者向けにまとめたドキュメントになります。
## 免責事項
本記事の閲覧および利用によって発生したあらゆる損害に関して、著者done_sanは一切の責任を負いかねます。また、本記事から他のサイトへ移動された場合、移動先サイトで提供される情報やサービス等についても一切の責任を負いかねます。
## 動作環境
本記事の検証は以下の環境で行われています。
– ルータ: [Cisco892J/K9](https://www.cisco.com/c/ja_jp/support/routers/892-integrated-services-router-isr/model.html)
– IOS: Version 15.1(4)M3使用する機器やOSバージョンの違いにより、使用できるコマンド等に差異が生じる場合がありますのでご注意ください。
## 対象読者
Cisco ルータをセットアップしたことがない人## 対象でない読者
すでにCis
GCP + ネイティブアプリでのGitLab flow構築
# はじめに
これは今さらな2021年振り返りカレンダーの2日目の記事です.
[トゥイター](https://twitter.com/mahiiiki)も良かったらフォローしていただけると嬉しいです?前回はCloud Run上で動くサービス用にGitHub flowでのCD環境を構築する話でした.
https://qiita.com/sheep96/items/e8e09de094949ce63509
前回の最後やいろんな記事で述べられているとおり,GitHub flowは審査が必要なネイティブアプリなど,アプリケーションの
リリースタイミングをこちら側でコントロールできないケースで不都合が発生します(モノレポ想定です).例えばあるアプリについて,後方互換のない新機能が入ったバージョンv2がmainにマージされ,stg環境に
上がっているとします.
この時,prdのネイティブ以外の部分でなんらかのバグが見つかり,すぐに修正を行いたいとき,通常のサービスならば,
修正PRをmainにマージし,新規機能とともにリリースすることができます.
しかしネイティブアプリの場合
ITの力でアレはもう少し便利になるかも
バスの話です。
# アイディア編
ローカルな話題で申し訳ないですけど、私はよく調布駅から三鷹までバスに乗ります。三鷹に美味しい店があるんです。通勤時間帯の混雑したバスは嫌ですけど、休日の、空いている時間帯のバスはのんびりしていて好きです。
調布駅北口の、パルコの前の乗り場で三鷹行きのバスを待っていると、目の前を「三鷹行き」のバスが通り過ぎていくことがあります。えっなんで? と悔しい思いを何度かしました。どういうことかといいますと、経路が少し違う3つの三鷹行きの路線が、それぞれ別の乗り場から出ているんですね。これは慣れないと分かりづらいです。
以下にあるのが、12番乗り場から出る三鷹行きの時刻表の例です。数字は出発時刻(分)を示します。これは日曜の10時台の例です。
“`
06,20,33,47,59
“`
ちなみにこれは鷹56という路線名で、神代植物公園を経由します。次に11番乗り場から出るやつ。(同じく日曜の10時台)
“`
00,20,39,58
“`
これは鷹66という路線名で、布田から三鷹通り、航研前を経由します。最後に14番乗り場から出るやつ。(同じく
M1 Cocoapods install
### ターミナルを 「Rosettaを使用して開く」
Finderからターミナルを探し、
右クリックで「情報を見る」 > 「Rosettaを使用して開く」 にチェックを入れる。“`ruby:
sudo gem install cocoapods// (アンインストール)
sudo gem uninstall cocoapods
“`上記でインストール失敗した場合は
“`ruby:
sudo gem install -n /usr/local/bin cocoapods
“`
続いて
“`ruby;
// セットアップ
pod setup// Podfile作成
pod init// ライブラリのインストール
pod install
“`
【Swift】スマホを喋らせる(合成音声)
# 実装
“`swift
import SwiftUI
import AVFoundationstruct ContentView: View {
let synthesizer = AVSpeechSynthesizer()
var body: some View {
Button(“スピーチ”) {
speech()
}
}
func speech() {
let text = AVSpeechUtterance(string: “こんにちは、ここの文字を読み上げます”)
let language = AVSpeechSynthesisVoice(language: “ja-JP”)
text.voice = language
synthesizer.speak(text)
}
}
“`# 解説
## AVFoundationのインポート
“`swift
import AVFoundation
“`##
Remote Test Kitの実務での使い方と所感
# はじめに
この記事は、[Qiita Engineer Festa 2022](https://qiita.com/official-campaigns/engineer-festa/2022)で[Remote TestKitを使ってレビューを書こう!](https://qiita.com/official-events/f0e8b25feb05af6326b3)のエントリー記事です。私が所属する開発チームでは、スマートデバイス向けアプリおよびブラウザ上で動作するサービスを開発しています。
https://apps.apple.com/in/app/company-%E5%B0%B1%E5%8A%B4-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E7%AE%A1%E7%90%86/id1513285570?platform=iphone
Remote Test Kitは、上記アプリやモバイルブラウザ上で動作するサービスについて、**複数OS×デバイスでの実機テスト**のために社内で実際に利用しています。
あま