URLエンコード [Xcode / swift]
MPMovieControllerでYoutubeの動画再生[Xcode / swift]
探しまくってようやく出来たのでメモ。
簡単にまとめると以下
・MPMovieControllerではそのままyoutubeの再生はできない
・そのためHCYoutubeParserというライブラリを使用(非公式)
・Bridging-Headerの設定を行う(上記ライブラリがObjective-Cのため)
・動画を表示させるコントローラーにソースを記述
import UIKit import MediaPlayer class ViewMovieController: UIViewController{ var moviePlayer : MPMoviePlayerController? override func viewDidLoad() { super.viewDidLoad() let srcUrl = NSURL(string:"{youtubeのURL}?feature=player_detailpage&playsinline=1") let dict = HCYoutubeParser.h264videosWithYoutubeURL(srcUrl) let url = NSURL(string: dict["medium"] as! String) self.moviePlayer = MPMoviePlayerController(contentURL: url) if let player = self.moviePlayer { player.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height) player.view.sizeToFit() player.scalingMode = MPMovieScalingMode.Fill player.fullscreen = true player.controlStyle = MPMovieControlStyle.Fullscreen player.movieSourceType = MPMovieSourceType.File player.repeatMode = MPMovieRepeatMode.One player.play() self.view.addSubview(player.view) } }
UILabelの文字を上寄せにする[Xcode 6/ swift]
UILabelにはなぜか上寄せがないので、コードを書く必要があります。
@IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() label.text = 'なんか長い文字列・・・' label.numberOfLines = 0 label.sizeToFit() }
numberOfLinesを0にした後に、sizeToFit()で大きさを計算して合わしています。
以外と簡単なのでよかったです。
ちなみにこの処理はlabelの内容を変更するたびに行わなければいけません。
GooglePlayでAPKが新バージョンが公開できない
GooglePlayで新バージョンが公開されないよ。
APKは上げたのに!
この設定は次の理由から公開できません: バージョン 1 は端末設定に配信されません: バージョン 1 がダウンロード候補となるすべての端末でバージョン 102, 2 のうちいずれかのバージョンがダウンロードされます。 一部の端末が複数の APK の実行対象となっています。このような場合、端末では最も高いバージョン コードの APK が受信されます。
英語だと
Version xx is not served to any device configuration: all devices that might receive version xx would receive one of versions
世の中にはいろんな意見がありますが
僕の場合は古いAPKを「無効」にすると新しいAPKが公開できるようになりました。
「無効」にするとAPKの公開がされなくなって現行バージョンがダウンロードできなくなるんじゃないかって思いますが。そんな事ないのでご安心を。
戻るを実装する[X code6/swift]
戻るを実装したいが、なかなかいいのが見つからなかったのでメモしておく。
①元の画面
②遷移先
とする
今回やりたいのは②の遷移先から①の元の画面に戻りたいのだ。
で、結論から言うと3ステップ
1. ①に戻るためのメソッドを記述
2. ②に戻るためのボタンを設置
3. ②のボタンとExitを1で作成したメソッドで繋げる
戻るためのメソッドを追加
以下を①のクラスの中に追加@IBAction func unwindAction(segue: UIStoryboardSegue){ }
ボタンを設置
②の画面のどこでもいいのでボタンを設置してくださいボタンとメソッドをつなげる
設置したボタンをcontrol押しながら一番右のExitにドラッグします。すると1のメソッドが出てくるので選択します。
これで戻るが実装されているはずです。
アプリで録音してサーバにアップロードする[Swift / XCode 6]
アプリで録音してサーバにアップロードする処理がどこを探してもないのでメモしておく。
録音するまでは調べれは出るので、録音した後の処理。
func myAudioUploadRequest(recorder : AVAudioRecorder) { var myUrl:NSURL = NSURL(string: "http://localhost/voice/upload.php")! var fileurldata:NSData = NSData(contentsOfURL:recorder.url, options:nil, error:nil)! var request = NSMutableURLRequest(URL: myUrl) request.HTTPMethod = "POST" request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") var base64String = fileurldata.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) var err: NSError? = nil var params = ["sound":[ "content_type": "audio/aac", "filename":"test.m4a", "file_data": base64String]] request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions(0), error: &err)! var session = NSURLSession.sharedSession() var task = session.dataTaskWithRequest(request, completionHandler: { data, response, error -> Void in var strData = NSString(data: data, encoding: NSUTF8StringEncoding) var err: NSError? // process the response }) task.resume() // this is needed to start the task }
録音が終わった時点でファイルが生成されているので、そのパスからデータをNSDataにして、base64encodeを行う。
あとはjson形式のパラメータにつっこんでポストする。
サーバ側の処理はjsonに対応して以下のように
$json_string = file_get_contents('php://input'); $obj = json_decode($json_string,true); $sound = $obj['sound']['file_data']; $fp = fopen("[file_path]/test.m4a",w); fwrite($fp,base64_decode($sound)); fclose($fp);
もろもろ処理は残るが、だいたいこんな感じ。
Macで仮想環境を構築する
Macに仮想環境を構築してみる。
標準でapacheが入っているが、中身を汚したくないので別で作ろうと思った。
今回は下記を使用
・Virtual Box
・Vagrant
・CentOS7.1
まずはVirtual Boxのインストール
Oracle VM VirtualBox - Downloads | Oracle Technology Network | Oracle
インストールしたら次はVagrant
Download Vagrant - Vagrant
Vagrantは仮想環境構築を便利にしてくれるツールで。コマンドを打つだけで全て済むのでかなり衝撃的。
Vagrantのインストールが終わったら、OSのインストール
vagrantでは
vagrant box add {好きな名前} {URL}
と打てば仮想環境を構築することができる。
今回CentOS7.1を使うので下記からURLを持ってくる
http://www.vagrantbox.es/:site
あとは先のコマンドの通りに打てばOK
vagrant box add centOS71_64 centOS71_64 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
Successfully added box 'centOS71_64'
と出れば追加完了。
vagrant box list
で追加が確認できます。
あとは適当な所にディレクトリを作って仮想環境を立ち上げます
mkdir centOS71_64 mv centOS71_64 vagrant init vagrant up vagrant ssh