- 0.0.1. iOSでアプリ内課金を実装する(サーバーサイド)
- 0.0.2. (Swift) (MultipeerConnectivity) Bluetooth等でiOSの端末間の通信(P2P通信)を実現する方法
- 0.0.3. 【Xcode】シュミレーターAppleWatchの言語変更方法
- 0.0.4. Windows11へios-webkit-debug-proxyをインストールして、chrome://inspect/で iOS Safariデバッグする。
- 0.0.5. Segmented Controlのセパレーターを消す方法
- 0.0.6. 【Xcode】アプリのアイコンをユーザーが選択可能にする
- 0.0.7. IQKeyboardManagerを使用する際、特定の画面のみ機能を無効にする
- 0.0.8. [SwiftUI]TextFieldのテキスト入力監視処理のサンプル
- 0.0.9. setup appium in Mac for iOS APP (Monterey)
- 0.0.10. 【Swift】ローカルのHTMLとCSSをWebViewに表示する
- 0.0.11. Bitriseを用いたreact-nativeアプリ (iOS) のCI/CD構築
- 0.0.12. iOS 16:秘密値の保存、FaceID認証に基づく個人情報の表示/非表示(LARight)
- 0.0.13. CocoaPods の利用手引き
- 0.0.14. [SwiftUI / WidgetKit]大きさが異なるウィジェットを設定する
- 0.0.15. SwiftUIで円形プログレスバーを作成する
- 0.0.16. onAppearメソッドとは
- 1. onAppearメソッドとは
iOSでアプリ内課金を実装する(サーバーサイド)
# はじめに
個人的な備忘として、iOSアプリでアプリ内課金を実装する際のHowToやノウハウを残しておく。
**動いていることは確認しているが、あまり洗練されている気がしない。。。**
**[App Store Server Notifications](https://developer.apple.com/documentation/appstoreservernotifications) を利用すれば、多分、もう少し良い具合に実装できそう。**
**ベストプラクティスだとは思わないで頂けると。。。**# 処理
以下、時系列に従って実装の概要・勘所を説明する。
## 1. アプリ内課金を実施する
割愛(サーバーから商品情報取得したり、App Storeで決済したり)
## 2. アプリでレシートを取得する
アプリ側の実装として、以下のコードを参考にApp Storeからレシートを取得する。
取得したレシートは、サーバーへ送信し、検証・商品提供を行う。“`swift
// エラーハンドリングは割愛
let url = Bundle.main.appSt
(Swift) (MultipeerConnectivity) Bluetooth等でiOSの端末間の通信(P2P通信)を実現する方法
#目次
# [1.はじめに](#1-はじめに)
端末間通信(P2P)をするアプリを開発する際にめちゃくちゃ苦労したので、今後はこの機能をスムーズに開発するために概要から実際のサンプルコードをここに残します。
この記事を見ればMultipeerConnectivityライブラリを使っての端末間通信のアプリを開発できるようになると思います。
この記事では近距離通信の機能を実装していきます# [2.この記事の対象者](#2-この記事の対象者)
・BluetoothやWi-Fiを使って端末間の通信アプリを開発したい方
・MultipeerConnectivityを使って何らかの通信アプリを開発したい方
・MultipeerConnectivityのサンプルコードを使いたい方
# [3.接続手順](#3-接続手順)
1、端末間通信をサポートするMultipeerConnectivityライブラリを導入
2、[MCPeerID](https://developer.apple.com/documentation/multipeerconnectivity/mcpeerid)を発行(端末を識別す
【Xcode】シュミレーターAppleWatchの言語変更方法
# はじめに
https://qiita.com/SNQ-2001/items/c72bca5e8c1eefe9cd29↑これの続きです。
今回はシュミレーターAppleWatchの言語の変更方法です。
# 現状
iPhone – 日本語
AppleWatch – 英語
![スクリーンショット 2022-07-22 23.35.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/faf2608e-0a7d-9b3b-101d-7f2830826562.png)# 問題点
「5分前」と表示するところが「5 minutes ago」と表示されてしまってレイアウトが崩れています。
|✅日本語|❌英語|
|-|-|
|![twitter_FYFEpZfacAETTAa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e8db841f-1d8f-7227-8855-b9f7e9e02e50
Windows11へios-webkit-debug-proxyをインストールして、chrome://inspect/で iOS Safariデバッグする。
# はじめに
iOSデバイスで動作しない、Javascriptがある。Windows,MacOS,Androidの各デバイス、ブラウザでは動作するのに、iOSデバイスでのみChromeでもSafariでもだめだ。さて、デバッグしたいのだが・・・iPhoneのブラウザでデバッグ情報ってどこに出てくるの?これが、ことの始まり。対応策としては、掲題の方法があるとのことで試してみた。
# セットアップ
セットアップ方法については、先達に従う。説明丸投げ。
https://zatta.link/web/debug-ios-safari-with-windows.html執筆時点で64bitWindowsのPoweshellでの操作においては、64bit 1.8.8 がインストールされた。
“`
PS C:\Users\microsoftaro> scoop install ios-webkit-debug-proxy
Installing ‘ios-webkit-debug-proxy’ (1.8.8) [64bit]
…
..
“`注意点としては、Windowsに npm
Segmented Controlのセパレーターを消す方法
通常Segmented Controlには赤枠で囲んだ仕切り線が付いているので、これを消したい。
だが、Segmented Controlにはそれを隠すようなプロパティはないようだった。
ただ調べると[setDividerImage(_:forLeftSegmentState:rightSegmentState:barMetrics:)](URL “https://developer.apple.com/documentation/uikit/uisegmentedcontrol/1618558-setdividerimage”)というメソッドがあり、これを使ってセパレーター画像を設定できるらしい。
なので下記のコードでSegmentd C
【Xcode】アプリのアイコンをユーザーが選択可能にする
# はじめに
私はこちらの記事を拝見させて頂き、無事実装することができました。
しかし、現在はやり方が少し変わっていたので最新の方法を載せておきます。やり方はあまり変わりませんがSwiftUIでの記事がなかったので、今回はSwiftUIで実装します
# やり方
① プロジェクトを選択します。
② ターゲットを選択します。
③ 「General」を選択します。
④ 「include all app icon assets」にチェックを入れます。
![スクリーンショット 2022-07-21 22.01.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/64fbf288-a041-cf8c-ce97-0b6805daea6b.png)アイコンを設定します。
ちなみにアイコン作成は[これ](https://github.com
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 の使用方法## 開発環境
|
配列からランダムに任意の要素を重複なしで取り出すつもりでした。
# きっかけ
クイズを出題するアプリを作ろうと思ってたときに、ランダムに問題を出題させたいなと思ったのがきっかけです。
## 作った関数
:::note alert
この関数は計算回数が多くなるので、悪いアルゴリズムの例としてよーく覚えておきましょう!
:::
“`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
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