サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
xyk.hatenablog.com
環境:macOS Sonama 14.2.1 macOS 環境で QuickTime Player を使って画面収録(ショートカットはCommand(⌘) + Shift(⇧) + 5)を行う場合、masOS上で再生されている音声は収録されない。 音声も同時に収録できるようにするため「Soundflower」という昔からある仮想オーディオデバイスを作成するソフトをインストールしようとしたが自分の使っている Apple シリコンの mac にはインストールできなかった。 調べたところ、同様な機能をもつ「Blackhole」というソフトがあることを知り、こちらを試したところ問題なくインストールできた。 BlackHole インストール 公式サイトからソフトをダウンロードできるがメアド登録が必要だったので、今回は Homebrew からインストールした。 Homebrew でインストール $ b
検証環境: Xcode Version 12.5 (12E262) Swift 5.4 ユニバーサルリンク(Universal Link)から iOS アプリが呼び出された場合にはAppDelegateのapplication(_:continue:restorationHandler:)メソッドが呼び出される。 これはアプリが 未起動状態からアプリ起動 バックグラウンド状態 からフォアグラウンドになる のどちらでも呼び出される。 func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { if userActivity.ac
検証環境: Xcode 12.2 Swift 5.3.1 Xcode のキャッシュファイルなどの関連ファイルはかなりのディスクスペースを消費するので定期的に削除するほうがよい。 DerivedData 中間生成ファイル。アプリ単位でビルド時に作成される。 ビルドが突然できなくなった場合などこれを消すと解消する場合がある。 rm -rf ~/Library/Developer/Xcode/DerivedData/* iOS DeviceSupport Xcode が iOS 実機端末との接続を認識したタイミングで作成される。 iOS バージョンをアップデートする度に新しいディレクリが増えていく。 全削除して問題なし。 $ l ~/Library/Developer/Xcode/iOS\ DeviceSupport/ 13.5.1 (17F80) 13.6 (17G68) 13.6 (17G6
環境: Xcode8.2.1, Swift3 UIScrollViewのisPagingEnabledプロパティを true にすると、ページ単位のスクロールが可能になる。 このときに現在のページ数を求める方法についてメモ。 ページングは横スクロールの場合なら UIScrollView のcontentOffset.xがUIScrollView.bounds.widthの半分を超えたところでドラッグを離すと隣のページに進み、半分を超えてなければ元のページに戻る挙動になっている。 まず、その時点のcontentOffset.xからページ数を計算する Extension を追加する。 extension UIScrollView { var currentPage: Int { return Int((self.contentOffset.x + (0.5 * self.bounds.widt
環境: Xcode8.2.1, Swift3 Storyboard 上で UIScrollView を AutoLayout を使って設定する方法について。 ちょっとハマったのでメモ。 ビューの階層構造は UIViewController.view -> UIScrollView -> UIView とする。 UIScrollView の制約 UIScrollView の制約は以下のように上下左右に設定。 UIScrollView上に追加する UIView の制約 UIScrollView上に追加する UIView の制約は以下のように設定。 制約はすべて Superview である UIScrollView に対して設定を行う。 上下左右の制約に加え、width と height の制約も必要になる。 今回は UIScrollView の width , height と Equal な
環境: Swift2.3 前提となるCapabilitiesの設定 - Push Notifications -> ON - Background Modes -> OFF プッシュ通知受信時に呼ばれるメソッド プッシュ通知受信時に呼び出されるメソッドに 1. application:didReceiveRemoteNotification:と 2. application:didReceiveRemoteNotification:fetchCompletionHandler: という似たメソッドが存在するがこの違いについてメモしておく。 // 1 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { // userInfo
環境: Xcode8.2.1, Swift3 UIScrollView の Bounce 設定のパラメータが3つあるが、これらの違いについて調べた。 Storyboard 以下がデフォルトの設定 コード // UIScrollView // default YES. if YES, bounces past edge of content and back again open var bounces: Bool // default NO. if YES and bounces is YES, even if content is smaller than bounds, allow drag vertically open var alwaysBounceVertical: Bool // default NO. if YES and bounces is YES, even if c
Xcode(8.0) で調べる Window -> Devices and Simulators からiPhoneデバイスを選択、identifierの部分が UDIDになる。 iTunes で調べる 初期表示はシリアル番号となっているがその辺りをクリックすると表示項目が切り替わり、UDIDが現れる。 シリアル番号 -> UDID -> ECID -> 機種ID の順に切り替わる。 右クリックからコピーできる。 instruments コマンドで調べる ターミナルから以下コマンドを実行。Xcodeをインストールしていれば使える $ instruments -s devices 追記: instruments コマンドがいつの間にか deprecated になっていた。 `instruments` is now deprecated in favor of 'xcrun xctrace' (
環境:iOS10.1 新しいiPhoneを購入後、WifiのHTTPプロキシ設定を「手動」で行うとしたところ、入力しても保存されず、なぜかオフになってしまう現象が起きた。 どうやら前のiPhoneのバックアップから復元した場合に発生するようだ。 「このネットワーク設定を削除」から設定を一度削除し、パスワードを入力して接続し直したところ、プロキシ設定ができるようになった。
環境: Xcode7.1 アプリデータのディレクトリを調べる 例えば iOSシミュレータにインストールした、あるアプリのDocumentsディレクトリは以下のようになる。 ~/Library/Developer/CoreSimulator/Devices/CC8FA744-B3C2-4689-839F-33B504F6168A/data/Containers/Data/Application/3E4EBE82-0BC7-405E-B143-5F40B03EBBA8/Documents デバイスID、アプリIDの部分がランダムな文字列になっていて、パスからは何のアプリなのか判別できない。 このパスはアプリで以下コードを実行することで確認することができる。 // swift3 print(NSSearchPathForDirectoriesInDomains(.documentDirector
setNeedsLayout() 現在の子Viewの配置を無効にし、次の更新サイクルで配置し直すようにする(メインスレッドから呼ぶこと)。 このメソッドは即時の更新を強制するものではなく、次の更新サイクルを待つので、更新要求を書き留めたらすぐに処理を戻す。 これを利用して複数のViewの配置を無効にできる。 layoutIfNeeded() 子Viewを即時に配置する。描画前に子Viewを強制的に配置するために使う。 このメソッドを呼んだViewをルートとし、その子孫View全ての配置を行う。 layoutSubviews() 子Viewを配置する。デフォルトの実装では、子Viewの大きさや位置を決めるために設定したConstraintを使う。 サブクラスでは子ViewのautoresizingとConstraintに基づく振る舞いが期待通りにならない場合にオーバーライドする。 このメソッ
環境: Swift2.0 アプリ内にデータを保存する場合、どこに保存するのかを調べた。 だいたい以下のディレクトリ(またはこれらの中に作成したサブディレクトリ)のどれかに保存することになるようだ。 Documents/ Library/ Library/Application Support/ Library/Caches/ tmp/ 保存するデータの内容によって使い分ける必要がある。 Apple のガイド https://developer.apple.com/jp/documentation/FileSystemProgrammingGuide.pdf から引用する。 Documents/ ユーザが生成したデータを保存するために使います。ファイル共有の機能により、ユーザはこのディレクトリ以下にアクセスできます。したがって、ユーザに見せても構わないファイルのみ置いてくだ
ステータスバーの高さを取得する Objective-C float statusHeight = [[UIApplication sharedApplication] statusBarFrame].size.height; ナビゲーションバーの高さを取得する float navigationBarHeight = self.navigationController.navigationBar.frame.size.height; 追記 Swift ステータスバーの高さを取得する let statusHeight = UIApplication.sharedApplication().statusBarFrame.height ナビゲーションバーの高さを取得する let navigationBarHeight = self.navigationController?.navigationB
環境: Xcode7 GM iOS9 対応で行った作業メモ。 App Transport Security(ATS)対応 HTTPS 接続にする必要あり。今回はとりあえずHTTPを許可するようにInfo.plistに以下の手順で追加する。 NSAppTransportSecurityを Dictionary で追加。 その下でNSAllowsArbitraryLoadsをBooleanで追加し、YESを設定。 カスタムURLスキーム対応 openURL、canOpenURLのようなメソッドでカスタムURLスキームを呼び出す場合、Info.plistに登録しなければ使えないようになった。 admob SDK を使ってるのだが、アプリ起動時に以下のような許可されてないスキームのエラーが出るようになった。 -canOpenURL: failed for URL: "itms-books://"
環境: ruby: 2.2.0 Rails: 4.1.8 ClearDB(MySQL): 5.5.40 Heroku の MySQL アドオン「ClearDB」で文字コードutf8mb4で保存する方法についてメモ。 Rails + MySQL でutf8mb4を扱う方法は以前書いた。 ClearDB ではデフォルトのキャラクタセットは以下のように UTF8 になっている。 mysql> show create database heroku_1234567890abcde; +------------------------+---------------------------------------------------------------------------------+ | Database | Create Database | +-------------------
以前 Nginx + Unicorn + Sinatra 構成のアプリを作成したが、その時に行った設定をメモしておく。 サーバのディレクトリ構成 $ tree /usr/local/app /usr/local/app ├── config.ru ├── log │ ├── unicorn.stderr.log │ ├── unicorn.stdout.log │ └── crawler.log ├── myapp.rb ├── public │ ├── index.html │ ├── main.min.js │ └── underscore-min.js ├── tmp │ ├── pids │ │ └── unicorn.pid │ └── sockets │ └── unicorn.sock ├── unicorn.rb └── craw
環境: Mac aws-cli 1.7.0 jq 1.4 RDS MySQL(5.6.22) RDS MySQL の文字コードとタイムゾーンの設定を行ったのでその手順メモ。 操作はすべて aws-cli のコマンドラインで行う。 1. 文字コードの設定 RDS MySQL の文字コードおよび照合順序はデフォルトの状態でインスタンスを立ち上げると以下のようになる。 mysql> show global variables like 'character\_set\_%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | latin1 | | character_set_connection
環境:rails 4.2.0 Rails でリクエストの HTTP ヘッダはrequest.headersから取得できる。 すべてログに出力するなら # すべてログに出力する request.headers.sort.map { |k, v| logger.info "#{k}:#{v}" } 個別に取得するなら # ユーザーエージェントを取得する request.headers[:HTTP_USER_AGENT] request.envからでも取得できる。 # ユーザーエージェントを取得する request.env['HTTP_USER_AGENT'] 今回やりたいことはクライアント側から HTTP ヘッダに API のバージョンを埋め込んでリクエストしてくるので、すべてのリクエストの API バージョンを取り出してログに出力したい。 リクエストのパラメータを curl で再現すると以下
環境:iOS Deployment Target 7.1 以前、UIPickerView をキーボードのように表示・非表示させるというエントリーを書いたがもっと簡単なやり方を知ったのでメモしておく。 まず、以前のやり方は完了ボタンとそれを置くビューを自分で作って、UIPickerView といっしょに画面外から画面内に、画面内から画面外にアニメーションさせて移動させて表示・非表示を行っていた。 今回は UITextField を使い、その inputAccessoryView プロパティに UIBarButtonItem を、inputView プロパティに UIPickerView を設定するだけ。 このやり方なら表示・非表示の動作を自分で行わなくても UITextField にフォーカスが当たればキーボードのように下からシュッとアニメーションで現れるし、フォーカスが外れれば隠れる。 U
環境: Mac aws-cli 1.7.0 eb-cli 3.0.10 Ruby 2.1.5 Rails 4.2.0 今回のポイント VPC の環境構築(Subnet, IGW, Route Table) VPC 内に Elastic Beanstalk 環境構築 Elastic Beanstalk のプラットフォームは Rubyを選択、Rails アプリをデプロイする。 Rails でブログアプリケーションを作る例とする。 RDS(MySQL) を作成してアプリと連携する。Beanstalk 作成時ではなく別途作成して関連付けしない。 ELB、EC2、RDS は VPC内のパブリックサブネットに置く。 RDS はプライベートサブネットに置き、接続するには NAT インスタンス経由にすべきだろうけど、今回はパブリックサブネットにおいてインターネットから直接接続できるようにした。 無料枠で試
環境: Mac eb-cli 3.0.10 ruby 2.1.5 rails 4.2.0 今回は、Elastic Beanstalk 用のコマンドラインツールである EB CLI を使って Rails アプリをデプロイしてみる。 最近出た EB CLI 3系はコマンドが2系から大幅に変更されている。 現時点(2015/2/12)では3系に対応した日本語ドキュメントはまだ用意されていないので英語の方を参照する。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-reference-eb.html コマンド一覧を見てみると Heroku に似てきた気がする。 EB CLI のインストール手順は省略。homebrew でインストールした。 1. Ruby のサンプルアプリケーションをデプロイする まずは、Elastic B
環境:iOS Deployment Target 7.1 やりたいこと: ボタンタップ時にキーボードが下からシュッと出てくるようにピッカーを表示させたい。 完了ボタンのタップで決定、ピッカー以外の部分をタップした時にはピッカーを隠す。 こんなかんじ。 やってること ピッカー呼び出しボタンタップ時 キャンセル用のビューを画面全体に被せる。ターゲット/アクションデザインパターンを使ってターゲットとアクションを設定している 画面外に作成していたピッカーと完了ボタンをアニメーションで画面内に移動させ表示 を行う。 完了ボタンのタップで選択中ピッカーを取得してピッカーを隠す。 ピッカー外のキャンセルビューをタップでピッカーを隠す。 サンプルコード OverlayView.h #import <UIKit/UIKit.h> @interface OverlayView : UIView @proper
環境: Ubuntu 12.04 LTS (32bit) MySQL 5.5 MySQLはこちらでインストール済み。 前提として開発環境として使うのでセキュリティについては考慮しない。 iptables の変更 MySQL が使う3306ポートの開放が必要だが今回は Firewall をオフにして対応する。 iptablesを確認。 $ sudo ufw status Status: inactive 元々無効となっていた。 Firewall ON/OFF にする方法 $ sudo ufw enable $ sudo ufw disable MySQL の bind-address 変更 netstat でポートを確認。 $ netstat -ant Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.
環境: Mac Pygments という Python のパッケージがあり、その中の pygmentize コマンドラインツールを使うことでシンタックスハイライト表示できるようになる。 Pygments インストール まずは Pygments のインストール。 $ pip install Pygments または $ sudo easy_install Pygments lessfilter の作成 次にlessfilterという名前でシェルスクリプトファイルを作成してパスが通っている場所に置く。 # パス確認 $ printenv PATH /usr/local/bin/配下に作ることにする。 $ vi /usr/local/bin/lessfilter $ chmod 755 /usr/local/bin/lessfilter lessfilter #!/bin/bash case "
環境:iOS Deployment Target 7.1 スクロールする画面上でも固定されてスクロールしない View を実装する方法。 UIScrollViewDelegate プロトコルを実装して、スクロールする度に呼ばれるscrollViewDidScroll:で scrollView.contentOffset プロパティの座標を取得して固定したいビューの座標に設定してあげればよい。 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { _fixedView.frame = CGRectMake(100 + scrollView.contentOffset.x, 300 + scrollView.contentOffset.y, 100, 100); } こんな感じ。 サンプルコード FixedViewController
環境: rails (4.1.6) activerecord (4.1.6) mysql2 (0.3.16) Rails4 というか Rails でカウンター用カラムをインクリメントする簡単な方法がないか調べてみた。 やりたいこと MySQL だったら以下のような SQL を発行したい。 update books set reviews_count = reviews_count + 1, updated_at = now() where id = ? カウンターのインクリメントと同時にソートのために更新日時も一緒に更新したい。 検証用環境の作成 $ bundle exec rails new counter_app -d mysql -T --skip-bundle $ cd counter_app $ bin/bundle install --path vendor/bundle モデ
環境: MySQL Server version: 5.6.19 Rails 4.1.5 iPhone の絵文字を MySQL に登録しようとしたらMysql2::Error: Incorrect string value:...というエラーが出た。3バイトに収まらない4バイトUTF-8を扱うには MySQL 5.5.3 以上でキャラクタセットをutf8mb4にする必要がある。 database.yml の encoding を utf8 から utf8mb4 に変更した。 config/database.yml 修正前: default: &default adapter: mysql2 encoding: utf8 pool: 5 username: root password: socket: /tmp/mysql.sock development: <<: *default dat
環境:iOS Deployment Target 7.1 UITextField、UITextView は入力フィールドにフォーカスが当たると画面下からキーボードが現れるが、この時に入力フィールドが画面下側にある場合にキーボードの裏に隠れてしまう問題がある。 ※ 追記 Swift 版はこちら。 xyk.hatenablog.com やりたいこと 1画面に複数の UITextField と 複数の UITextView があった場合でも入力フィールドがキーボードに隠れないようにしたい。 対応方法 UITextField や UITextView をスクロールビューに乗せる。そしてキーボードの上げ下げに合わせてスクロールビューをスクロールさせる(+余白の追加)というやり方でできた。 流れ UIScrollView を作成 その上に UITextField, UITextView を配置 vie
環境:iOS SDK 7.1 UITableView (UIScrollView のサブクラス)でスクロールの位置を一番上に戻すやり方。 方法1. UIScrollView のcontentOffsetを設定する contentOffsetにcontentInset.top分を差し引いたオフセット(iOS7なら-64px)を設定する self.tableView.contentOffset = CGPointMake(0, -self.tableView.contentInset.top); そもそもcontentOffsetとは、内容部の矩形の左上を0, 0として、そこから何ポイントずれたところが表示矩形の左上に現れるかを決めるプロパティのこと。 で、なぜcontentOffsetに-self.tableView.contentInset.topを設定しているかというとテーブルの表示時に
次のページ
このページを最初にブックマークしてみませんか?
『xyk.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く