東京ビッグサイトで開催されたMaker Faire Tokyo 2017の会場にて先行発売されていたタミヤのロボット工作セットを購入し、マイコンボード(Arduino Uno)を載せる改造を試みてみました。
[iOS] Null passed to a callee that requires a non-null 1st parameter
症状
XcodeのAnalyze(静的コード解析)において以下の警告がでる。
Null passed to a callee that requires a non-null 1st parameter
原因
nil(null)を渡してはならない引数にnilを渡すケースがある。
解決法
全ての動作パスでnilを渡さないように修正する。
[iOS] アプリ回転対応方向設定
- iPhone : Portrait方向のみ(回転禁止)
- iPad : 全方向許可(回転許可)
ProjectName/Info.plist
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <!-- 中略 --> <key>UISupportedInterfaceOrientations~iphone</key> <array> <string>UIInterfaceOrientationPortrait</string> </array> <key>UISupportedInterfaceOrientations~ipad</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationPortraitUpsideDown</string> <string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string> </array> </dict> </plist> |
注:Xcodeからの変更はうまく反映されないため Info.plist をエディタで直接変更する。
環境
- Xcode 7.2.1
- iOS 10.3
[iOS] AutoLayoutが期待通りに働かない
原因
旧来の AutoSizing が(デフォルトで)有効になったままで、あたらしい AutoLayout は無効になっている。
UIオブジェクトのプロパティ translatesAutoresizingMaskIntoConstraints が有効になっている。
AutoSizingを無効にする(=AutoLayoutを有効にする)コードの例
1 2 3 |
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; indicator.translatesAutoresizingMaskIntoConstraints = NO; // !!! HERE !!! |
autolayoutにおいてUINavigationBarの重なりを避ける
UIViewControllerのtopLayoutGuideプロパティを参照する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
self.upperView.translatesAutoresizingMaskIntoConstraints = NO; self.lowerView.translatesAutoresizingMaskIntoConstraints = NO; NSNumber *vPadding = @0; NSNumber *hPadding = @0; id topGuide = self.topLayoutGuide; UIView *upperView = self.upperView; UIView *lowerView = self.lowerView; NSDictionary *views = NSDictionaryOfVariableBindings(topGuide, upperView, lowerView); NSDictionary *metricsDictionary = NSDictionaryOfVariableBindings(vPadding, hPadding); NSArray *vConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[vPadding]-[topGuide]-[upperView(100)]-[lowerView]-[vPadding]-|" options:0 metrics:metricsDictionary views:views]; [self.view addConstraints:vConstraints]; NSArray *hConstraints1 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[hPadding[-[upperView]-[hPadding]-|" options:0 metrics:metricsDictionary views:views]; [self.view addConstraints:hConstraints1]; NSArray *hConstraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[hPadding[-[lowerView]-[hPadding]-|" options:0 metrics:metricsDictionary views:views]; [self.view addConstraints:hConstraints2]; [self.view layoutIfNeeded]; |
https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/
ログアウト後もコマンド実行を継続する
nohupコマンド
1 |
$ nohup <command> & |
例
1 |
$ nohup tar cvzf foo.tgz ./foo & |
ログアウトしたり、リモートターミナルが切断された後もコマンドを継続する。
「Playストア」アプリの不正終了
WD Cloudへのssh接続
パーソナルクラウドストレージ(個人向けNAS)製品 "WD Cloud" に、macOS 10.12 (Sierra) から ssh接続を試みると失敗する。
エラーの例
1 2 |
$ ssh -l sshd wdcloud.local Unable to negotiate with 192.168.xx.xx port 22: no matching host key type found. Their offer: ssh-dss |
失敗の理由
(macOSに限らず)最新のsshクライアントにおいて、暗号化アルゴリズム ssh-dss がデフォルトでは無効にされている。
解決方法
[方法1] コマンドラインオプションでssh-dssを有効にする
1 |
$ ssh -oHostKeyAlgorithms=+ssh-dss sshd@wdcloud.local |
[方法2] 設定ファイル .ssh/config
でssh-cssを有効にする
1 2 3 4 |
Host wdcloud HostName wdcloud.local User sshd HostKeyAlgorithms +ssh-dss |
オリジナルソース
[Obj-C] 反復処理
enumrateObjectsUsingBlockメソッド
1 |
- (void) enumerateObjectsUsingBlock: (void (^)(id obj, NSUInteger idx, BOOL *stop)) block |
- block
- 配列の要素に適用する操作。blockの中が for(;;){ do_anything; } の do_anything に相当する。
- obj
- 配列から取り出した要素。
- idx
- 配列要素のインデックス。forループのカウンター値に相当する。
- stop
- 停止フラグ。stopにYESを代入するとその時点で停止する。forループのbreak文に相当する。
OpenCVを組み込んだiOSアプリが“Missing Info.plist key”を理由にAppStore審査不合格
不合格理由
アプリがカメラ機能を使用するにもかかわらず xxx-Info.plist にカメラ機能を使用する理由の記載(NSCameraUsageDescription)がない。
カメラ機能を明示的には使用していないケースであっても、OpenCV(opencv2.framework)を組み込むとカメラ機能を呼び出す(ことができる)バイナリ・オブジェクトがアプリに含まれてしまう。