- 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. iOS, macOS各デバイスのバックアップの取り方
- 1.0.11. 【Xcode】SwiftPlaygroundsのプロジェクトをXcodeで作る
- 1.0.12. Swift UIで割り勘アプリを作ってみた!改良ver
- 1.0.13. できるだけ「良い」迷路を自動生成するアルゴリズムを考える
- 1.0.14. [iOS]サンドボックスでテスト課金が急にできなくなった!!
- 1.0.15. input type=”date” iOSの日付入力のクリアボタンが機能しない
- 1.1. 初めに
- 1.2. 解決したコード
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日目の記事です.
前回はCloud Run上で動くサービス用にGitHub flowでのCD環境を構築する話でした.
https://qiita.com/sheep96/items/e8e09de094949ce63509
前回の最後やいろんな記事で述べられているとおり,GitHub flowは審査が必要なネイティブアプリなど,アプリケーションの
リリースタイミングをこちら側でコントロールできないケースで不都合が発生します(モノレポ想定です).例えばあるアプリについて,後方互換のない新機能が入ったバージョンv2がmainにマージされ,stg環境に
上がっているとします.
この時,prdのネイティブ以外の部分でなんらかのバグが見つかり,すぐに修正を行いたいとき,通常のサービスならば,
修正PRをmainにマージし,新規機能とともにリリースすることができます.
しかしネイティブアプリの場合,アプリの審査がリリース前に挟まれるため,修正をデプロイするには,
審査を待つか,既にmainに入っている新機能をrevertす
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
“`##
iOS, macOS各デバイスのバックアップの取り方
Beta版の開発・調査をするにあたって、事前にバックアップを取りたかったのでやり方を調べました
### 各端末情報
iPhone13 Pro
iPad Pro
MacBook Air
外付けSSD### iPhone, iPad
#### iPhone, iPadのみでiCloudへのバックアップ
「設定」>「ユーザー名」>「iCloud」
※AppleIDがない場合は、登録が必要です。画面に従い登録してください
![IMG_0004.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/a743e141-10a0-f7ef-787b-5ae80cea526e.png)
↓
「iCloud バックアップ」>「今すぐバックアップ」
これでできました
![IMG_0005-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/52d59467-6c58-f38c-d231-ff789b651eb4.pn
【Xcode】SwiftPlaygroundsのプロジェクトをXcodeで作る
# はじめに
個人的にはiOSアプリ開発の敷居が高いと感じています。
Macを買わないと始められないというのは大きいですが、
それ以外にXcodeの使い方が難しいというのもあると思います。しかし、iPadOS 15.2からSwiftPlaygroundsでiOSアプリを作成できるようになりました。
https://qiita.com/SNQ-2001/items/000fc93f8f5e5e5c1d5e
実際にiPadでアプリを作成からリリースまでやってみました。
簡略化されすぎてできない事が多いのも事実ですが、
Swiftに始めて触れるという初心者の方にはXcodeという難関がないのでとても良いと思います。SwiftPlaygroundsでは以下のようなプロジェクトが作成されます。
![スクリーンショット 2022-07-15 12.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4021b4e4-e42e-39e2-483f-d3569b392e05.png)
Swift UIで割り勘アプリを作ってみた!改良ver
SwiftUIを学んでいく過程でポートフォリオがてら作成した「**割り勘アプリ**」の作成手順と方法をまとめていきます。
初心者の方でも同じものが作れるように解説できたらなと考えています。
また至らぬ点や拙いところもあると思いますが優しく教えていただけると嬉しいです。
今回↓前回の記事で作成したアプリを改良していきます。
[SwiftUIで割り勘アプリの作り方を徹底解説!](https://qiita.com/amefure/items/9e158e538b695667d27f)
# 今回作っていくアプリ
:::note
割り勘アプリ 改良ver
:::![happy bithday.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/0285677b-b737-c606-9e1b-602dec1e7504.png)
● 追加する機能
+ メモも入力可能にする
+ 入力された情報をリスト表示
+ リストから情報の削除を可能に
+ 割り勘できる人数にカスタムを追加
+ アプリ
できるだけ「良い」迷路を自動生成するアルゴリズムを考える
# はじめに
迷路を作成するというQiitaの企画があったので参加します。Qiitaの企画
https://qiita.com/official-events/55631b864217a4df857aこの企画は、プログラムを使ってできるだけ「良い」迷路を作るものです。良いの基準は自分で決めてよいそうです。良い迷路になるようにソース上でいろいろな工夫をしていきます。言語はSwiftを使用します。
# 作成する迷路について
– 長方形で、左上がスタート、右下がゴール
– 大きさは縦横ともに7から30程度(壁の厚さも1と数える)
– 正解の経路は一つ
– ループ(後戻りなしで同じところをぐるぐる回る)なし
– すべて通路になっている2×2のエリアは存在しない
– すべて壁になっている2×2のエリアは存在しないすべて通路(or壁)になっている2×2のエリアは無駄な感じがするのでやめます。
![OK1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46631/33fc0cc8-7569-8944-
[iOS]サンドボックスでテスト課金が急にできなくなった!!
# はじめに
あるとき突然、「テスト課金ができない。特に課金周りのコードはいじっていないのに…」ということがあったので記事を書いておこうと思います。# この記事で問題を解決できるかもしれない人
以下の3つ条件に当てはまればおそらく解決できます。
逆に以下の3つの条件を満たさない場合は、この記事で問題を解決できない可能性が高いです。
– サーバー側、アプリ側のコードをいじっていないのに、消費型の課金テストが急にできなくなった
– レシート検証で「21003」が返ってくる
– 直近で`サブスクのアイテム`をAppStoreConnectに追加した※レシート検証時のstatusの値のそれぞれの意味は以下のドキュメントに記載があります。
https://developer.apple.com/documentation/appstorereceipts/status
# 結論
– レシート検証の時に`App用共有シークレット`をレシート情報と一緒に送れば解決!# 解決方法
## ①AppStoreConnectから該当アプリの「App用共有シークレット」の値を取得する
input type=”date” iOSの日付入力のクリアボタンが機能しない
初めに
webアプリをReactで作成していまして、` input type =”date” `を使用して日付の値を取得していたのですが、PCだと削除ボタンが機能し、iosだと機能しないという現象がおこりました。
解決するのに時間がかかりましたので忘記録です。解決したコード
“`react:app.jsx
import React,{useState} from ‘react’;
export default function App(props) {
// 日付の値を格納する
const [inputDate, setInputDate] = useState({ date: “” });// 日付の値を取得する処理
const handleOnChange = (e)=>{
const target = e.target;
const { name } = target;
const { value } = target;
//日付のセット
setI
【Swift】UIの階層を確認する
# はじめに
めっちゃ最近知った便利な機能「View UI Hierarchy」をちょっと調べてみました。最近作った[こちら](https://github.com/SNQ-2001/FontAwesome-Swift)のサンプルアプリで試してみます。
# 表示方法
アプリをビルドします。
![スクリーンショット 2022-07-14 16.38.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8f90c2d8-6d9c-13d3-5f28-a5e800b91c62.png)
① スプレーのようなアイコンを選択します。
② 縦3本線のアイコンを選択します。
![スクリーンショット 2022-07-14 16.39.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/26ae0722-b489-3bfe-8ed0-f5394cad5b2e.png)
「View UI Hierarc