Re:

のあんのブログ

カテゴリ: 開発

Macで環境構築してる場合ですが、
sailインストールしたら

$ php artisan migrate

ではなく

$ sail artisan migrate

しないとdockerコンテナのDB_HOST=mysql (.env) に接続できないよってお話。


前者は、phpをインストールしているmacローカルからmysqlに接続しようとしてるので、コンテナ内のホストが解決できないのは当たり前…(詳しくなかったら知らないのも無理ない)

コンテナに入って実行すればもちろん言うまでもなく前者で実行可能。


なお DB_HOST=127.0.0.1 にすれば前者でも接続できる。

けど、migrateのために書き換えて実行は面倒ですよね。エラー解決できなくて、しばしそれでやってたけど。

だって、ドキュメントのところ "php artisan" って書いてあるから、詳しくないとそうするよね…

以上



   Illuminate\Database\QueryException 


  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed: nodename nor servname provided, or not known (SQL: select * from information_schema.tables where table_schema = hoge and table_name = migrations and table_type = 'BASE TABLE')


  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:742

    738▕         // If an exception occurs when attempting to run a query, we'll format the error

    739▕         // message to include the bindings with SQL, which will make this exception a

    740▕         // lot more helpful to the developer instead of just the database's errors.

    741▕         catch (Exception $e) {

  742            throw new QueryException(

    743▕                 $query, $this->prepareBindings($bindings), $e

    744▕             );

    745▕         }

    746▕     }


      +35 vendor frames 

  36  artisan:37

      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

まじかよ…。

今日まで気づかないなんて、自ら使ってなかったのバレバレじゃん。

よーし、iOS7対応で申請しちゃうぞ!とか意気込んでUI手直ししてたら、動いてない!


icon_120

かいけぼ!
https://itunes.apple.com/jp/app/id695083171

13


どうやら、ホーム画面に追加したショートカットでフルスクリーンモード起動させると動かないようだった。

<meta name="apple-mobile-web-app-capable" content="yes">

このタグね! 

何が原因か分からず、ほぼネイティブ側のソースを疑ってました。


フルスクリーンモードではない場合、URL欄がコピーできる不都合はあるけれど…動作させることが先決なので仕方ありません。



アプリ内から別のスキーマ呼び出して起動するとか、URLのリンククリックでとかの利用なら何も問題ありませんが、このアプリの特性である data: スキーマで表示させているページをホーム画面に追加させて、そのショートカットによるアプリ起動という方法の場合は iOS7 からだとフルスクリーン起動によるコールはダメなようです。


サーバ側のHTML修正で済みましたが、重ねて 7.0 以上のみに対応したアプリで再申請しました!
 

UIScrollViewDelegate をプロトコル定義する。

 
self
.webView.scrollView.delegate = self; デリゲートに自身を設定する(カスタムクラスとか作ったのであればそれらを設定する  = [[CustomScrollViewController alloc] init] とか)。

  • ドラッグ開始
    scrollViewWillBeginDragging

  • ドラッグ終了
    scrollViewDidEndDragging

  • 止まった!
    scrollViewDidEndDecelerating


scrollTop 位置 self.webView.scrollView.contentOffset.y プロパティで取れる。


そんな感じだった。


あと、
AVAudioPlayer 使ってプレイしてたから音楽聴きながらアプリで遊べないじゃーんってことも発見したので、ふむふむ…うん。



まず? MediaPlayer.framework をリンクする、と。

ヘッダでインポート。

MPMusicPlayerController *mplayer = [MPMusicPlayerController iPodMusicPlayer];


[mplayer 
playbackState] で Stop か Pause 状態だったらプレイさせるようにすればいいですか?


意図したことはできてる気がするから、たぶん、それでイイんですよね、きっと。 



追記:

オーディオセッションを初期化した後チェックしないといけないようだった。

上記のチェックだとアプリ起動時こそクリアできたが…バックグラウンド→曲再生→フォアグラウンドに移行してくると無理だったでござる(´・ω・`)


オーディオセッションプログラミングガイド
https://developer.apple.com/jp/devcenter/ios/library/documentation/AudioSessionProgrammingGuide.pdf

51ページ「アプリケーション起動時にほかのオーディオが再生中かをチェックする」コードでOK!


3.5インチではステータスバーは表示せず、4インチでは表示させつつ、iOS7のフラットデザインでコンテンツにかぶらせないようにするためのメモ。

※iOS7.1から、iPhoneアプリを非RetinaのiPad(iPad miniとか)で動作させるとステータスバーの表示が画面にかぶるようになった。これはどんな設定でも消せない模様…(シミュレータで確認しても挙動は分かるが、RetinaのiPadだとかぶらない。バグとの見解)
消えないのは仕様っぽいけど、消し方が分かる人がいたら教えて下さい。

なお、iOS8.0からは消えるので、7.1で表示されるようになったのはバグっぽい。



iOS6までの4インチではステータスバーの高さ20pxにUIWebViewなどがかぶることはなかった。

けど、、、iOS7から平気ではかぶるからね!w

電波状況や時間、バッテリーがコンテンツにかぶっては邪魔なんです…。

05

とりあえず、アプリケーション起動中の画面ではいずれの場合もステータスバーは表示させないので、「Hide during application launch」にちぇっく。

57

余談だけど、iOS7でステータスバーをnoneにしてるのに消えない!という場合、Info.plistプロパティに「View Controller-based status bar appearance」を追加して「NO」を設定すると消せる。


本題。

Autolayoutで対応させる方法がわからないので、まずはオフる←

12

View as iOS 7.0 and Laterのまま。


UIWebViewをレイアウトする!

1,Yを20ずらす
2,Heightを20引いたぶんの548にする

iOS 6/7 Deltasの項目があるので、

3,ΔYを-20にする
4,ΔHeightを20にする

あと、Autosizingを設定。


17

たぶん、こんな感じだと思う。。。


これだけだと、iOS7&3.5inch(iPad miniも該当するので正確には320x480か)という条件には対応できておらず、、ステータスバーが表示され、さらに20px下がったままである!(´・ω・`)

すべてコードで対応しとくのが手っ取り早そうなのだが…。

ここまで来たことだし、その条件だけ対応させました。

- (BOOL)prefersStatusBarHidden

{

    float version = [[[UIDevice currentDevice] systemVersion] floatValue];

    CGSize size = [[UIScreen mainScreen] bounds].size;

    if (version >= 7.0 && size.height == 480) {

        [self.webView setFrame:CGRectMake(0, 0, size.width, size.height)];

        return YES;

    }

    return NO;

}

3.5inchの実機はiOS6のままなので、iOS7にアップデートしたiPad miniで確認!


非RetinaのiPadにインストールされたiPhoneアプリの表示がx1のみになり、画面いっぱいに表示される仕様になっていますが、スクリーンサイズは {320,480} でした。

おそらくRetinaでも同じはず(と信じたい)。


とりあえずは、OK!

もっと楽な方法があったら知りたい!

memo:
https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html 

 

なながつです!


Single View のプロジェクトを Storyboard で作ると、、、AppDelegate.m から ViewController.m のインスタンスにデフォでアクセスできない!!!

という、いまいち理解できてない Xcode の魔の手に掛かりましたw 


そんなんで悩んでました、そして疲れ果てました。


ViewController.m において、

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.viewController = self;

としてインスタンスを代入してやんないと、AppDelegate.m で扱えなかったのでした。


やること。

AppDelegate.h で ViewController を @class ViewController; して、@property (retain, nonatomic) ViewContorller *viewController; する(ViewController から参照できるようにするため)。

ViewController.m で、#import "AppDelegate.h" して、さっきのインスタンス代入する。



これで、[viewController.webView loadRequest:request]; とか、viewController.testLabel.text = @"test da yo!!" できるよーう。



いろいろと理解しているようでしていない実情に、嗚呼、死にたいわ/(^o^)\


↑このページのトップヘ