プログラミング

OSS の iOS の Web ブラウザアプリで、UserAgent を設定している箇所を見比べてみる。

気になったので、オープンソースな iOS の Web ブラウザアプリで、 WKWebview のカスタムユーザーエージェント(customUserAgent) を設定している部分を見てみる。 Chrome ユーザーエージェントの例 Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) …

Xcode 12.0 beta 2 (12A6163b) に含まれる Framework

Xcode 12.0 beta 2 (12A6163b) の iOS platform の Frameworks の中をみると $ cd /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks $ ls ARKit.framework AVFoundatio…

AppStoreConnect での米国輸出規制の暗号に関する質問をスキップする

免除される暗号のみを使用しているのに App Store Connect でアップロードごとに毎回、暗号に関する質問を答えるのが面倒。 その場合は、 Info.plist に以下を追加する。 <key>ITSAppUsesNonExemptEncryption</key> <false/> これでアプリには免除されていない暗号を使用してい</false/>…

iOS / Android 用のローカライズ文字列ファイルを生成するツール「strgen」

iOS / Android のローカライズ文字列ファイルを一括で生成するツールstrgen(Python)を作った。 PyPI に登録してあるので、 pip でインストールできます。 PyPI : https://pypi.org/project/strgen/ GitHub : https://github.com/daisuke-t-jp/strgen 概要 …

Python パッケージ作成に関する情報まとめ

Python パッケージ作成、PyPI(パイ・ピーアイ) への登録などに役立つ情報を、まとめる。 setup.py だけ使用するパターン、setup.cfg も使用するパターン、__init__.py に多くの役割を持たせるパターン/ほとんど役割を持たせないパターン、などパッケージ作…

iOS でパラパラ漫画のような見た目のインジケーターを作った

everysing というカラオケのアプリで、読み込み中に表示されるインジケーターがパラパラ漫画のようになっていて、キュートな感じがしてよい。(マイクやヘッドフォンのアイコンが表示される) この UI を再現したく、パラパラとアニメするインジケータを作っ…

macOS 10.15 から有効な EndpointSecurity API(SystemExtension.framework)

https://developer.apple.com/jp/system-extensions/ macOS 10.15 から、従来のカーネル拡張(KEXT)を使わずに、ユーザーランドで動作するソフトでシステムイベントを監視(おそらくイベントの許可/禁止も)できるようになった。 https://developer.apple.c…

GitHub Action の Private / Public リポジトリの制限

GitHub Actionsの支払いについて - GitHub ヘルプ Public リポジトリ GitHub Actions の制限はない Private リポジトリ GitHub Actions の実行時間とストレージに制限がある。 アカウントに存在するすべての Private リポジトリの実行時間、ストレージ使用量…

GitHub ワークフローで環境変数、シークレットな情報を使用する

これは 2020/05 時点の情報をもとにした記事なので、最新では事情が変わっている可能性を留意すること。 ワークフロー内で使用できる環境変数 環境変数の利用 - GitHub ヘルプ たとえば GITHUB_REPOSITORY(所有者とリポジトリの名前 octocat/Hello-World な…

GitHub ワークフローを使って、プロジェクトを定期実行し、成果物をデプロイする(Python)

GitHub ワークフローを使ってプロジェクトの定期実行→成果物をデプロイする方法を調べたのでまとめる。 これは 2020/05 時点の情報をもとにした記事なので、最新では事情が変わっている可能性を留意すること。 目的 GitHub ワークフロー / アクションの意味…

DuckDuckGo iOS アプリの「Find In Page(ページ内検索)」で入力文字の候補が選択できない問題を修正

DuckDuckGo Privacy BrowserDuckDuckGo, Inc.ユーティリティ無料 DuckDuckGo の iOS アプリで「Find In Page(ページ内検索)」で日本語が入力できない現象があったので、原因を調べて修正した。 DuckDuckGo は iOS / Android 共にオープンソースなので、第…

iOS の TensorFlow サンプルを試してみる

TensorFlow(テンソルフロー) や iOS でのサンプル実行の方法を調べたメモ。 https://www.tensorflow.org/lite?hl=ja iOS で TensorFlow を動かすには TensorFlow Lite を使用すると良い。 TensorFlow Lite はモバイルや組み込みデバイス向けにチューニング…

pod install と update の違い。あと deintegrate

pod install / update をいままで何となく使っていたので、違いを調べる。 https://guides.cocoapods.org/terminal/commands.html コマンドのマニュアル↑をみると install Podfile.lock に記載されているバージョンで、依存関係をインストールする update 古…

SwiftUI で GoogleAdMob バナーを表示する

SwiftUI で GoogleAds のバナー広告を表示するサンプルを作った。 方法としてはまず GADBannerView を表示する UIViewController を用意する。 class GADBannerViewController: UIViewController { let bannerView = GADBannerView(adSize: kGADAdSizeBanner…

Google AdMob (iOS)バナー広告のサンプルコードで「bottomLayoutGuide」の警告が出る件

https://developers.google.com/admob/ios/banner 2020/04/29 時点で、サンプルコードが以下になっているが func addBannerViewToView(_ bannerView: GADBannerView) { bannerView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(banne…

Swift TextField で入力した数内を金額(通貨)フォーマットにして表示する

https://github.com/daisuke-t-jp/SwiftCurrencyTextFieldSample Swift のテキストフィールドで入力した数値を「金額(円)表記」するサンプルを作ってみた。 ユーロ(€),ドル($) ならば、小数点の考慮も必要だが、日本円ならばこんな感じで。。

Swift URLRequest のタイムアウトを発生させる

URLRequest のリクエストがタイムアウトになった時の動作をみたい時がある。 そういう時は URLRequest の initializer で timeoutinterval をとても小さな値(たとえば 0.0001 秒とか)にすると、タイムアウトを発生させて、動作を試すことができる。 こんな…

UIResponder.keyboardDidShowNotification が他のアプリに切替した時にも通知される問題

iOS アプリでキーボードが表示されたイベントを知りたい時に UIResponder.keyboardDidShowNotification を通知を受ける。 コードは以下のたとえば下のようになる。 import UIKit import os class ViewController: UIViewController { override func viewDidL…

Python | POI データを取得して、地点の天気を得る

https://github.com/daisuke-t-jp/overpass_weather 今回作成したプロジェクトは GitHub に置いた。 概要 OpenWeatherMap API を使うと、呼び出し頻度の制限はあるが、無料で天気情報を取得できる。 https://openweathermap.org/ この取得する天気情報を、意…

SwiftUI の EdgeInsets で zero プロパティを使用する

iOS 13 SDK の時点では UIKit の UIEdgeInsets には zero プロパティがあるが https://developer.apple.com/documentation/uikit/uiedgeinsets/1624518-zero SwiftUI の EdgeInsets には zero プロパティが無い https://developer.apple.com/documentation/s…

SwiftUI List の高さを、項目の数と高さに合わせてちょうどフィットさせる

サンプルは GitHub にある。 List の高さが項目に対して、ちょうどフィットされていないと以下の課題が発生する List の高さが項目表示に足りない -> List 内スクロールが発生する List の高さが項目表示より大きい -> List が大きすぎて、見た目が悪い これ…

blurhash とは

blurhash という興味深い OSS を発見したのでメモ。 「画像」から「ブラー画像」を作るための「ハッシュ値」を作成できる 「ハッシュ値」から、ブラー画像を作成できる イメージはこんな感じ。 で、これは何に使うかと言えば、たとえば「アプリがサーバから…

OSM データから POI データを抽出する

OSM データの読みだしには Overpass API というのがあり、それを介してデータを取得することができる。 手取り早くこれを試すには GUI で Overpass API を試せるサイトがあるので、これを使ってみる↓ https://overpass-turbo.eu/ この左側に以下のクエリを書…

SwiftUI の View 上で、雨が降るアニメーションをつくった

SwiftUI の View に多数の Circle を表示して、雨っぽいアニメーションを作った。 UIView の drawRect をオーバライドしなくてもこのくらいはできるんだなあ。。

SwiftUI の UIView を画像にして保存するサンプル

SwiftUI で UIView の内容を画像(UIImage)にして、アルバムに保存するサンプルを作った。 SwiftUI は現在の View を直接 UIView として扱うことは難しいので UIApplication 経由で UIView を取得する感じになる。 extension UIView { func image() -> UIIm…

SwiftUI(iOS 13.3) / ScrollView 上に配置した List の項目選択が残る問題

SwiftUI iOS 13.3 で ScrollView 上に List を配置する その List から NavigationLink で遷移する を試すと、項目の選択が残ったままになる。 再現させる最小限のサンプルを GitHub においた↓ iOS 13.2 の時点で発生していたんだけど、 iOS 13.3 になっても…

複数の SVN ワーキングコピーの内容を最新に保つ

SVN の GUI クライアント(たとえば TortoiseSVN)を使うと、簡単に SVN 操作をできる。 しかし、複数の SVN ワーキングコピーに対して一括で操作したい場合、ひとつひとつ手作業をすると手間になる。 具体的には複数の SVN ワーキングコピーに対して、以下…

SwiftUI TextField の onEditingChanged() をハンドルする

SwiftUI TextField の onEditingChanged() を使ってみるサンプル。 今回のサンプルは 2つの TextField の入力を足し算するが TextField 編集中は、=(イコール)ボタンが押せない、という設定で試してみた。 初期状態 ボタンは押せる 編集開始した状態 ボタ…

SwiftUI NavigationView の Push/Pop をコードで実行する

SwiftUI の NavigationView の Push(進む)と Pop(戻る)をユーザのアクションではなく、コードで(pragmatically)実行する調査をしたサンプル。 サンプルはボタンアクションで Push/Pop するが、この調査結果により、コードで Push/Pop 実行できることが…

SwiftUI NavigationLink の有効/無効を切り替える

SwiftUI で NavigationLink の有効/無効の切替サンプルを作った。 ざっくりいうと NavigationLink は hidden にしておいて直接操作させず、代わりに Button のアクションを一枚噛ませて NavigationLink がアクションする、という流れにするとできた。 Naviga…