coocapodsでThere was an error reading '...CocoaPods-version.yml'.
pod install時に以下のエラーが出た。
$ pod install Updating local specs repositories [!] There was an error reading '/Users/xxxxxx/.cocoapods/repos/master/CocoaPods-version.yml'. Please consult http://blog.cocoapods.org/Repairing-Our-Broken-Specs-Repository/ for more information.
調べたところpsychというgemが悪さをしているらしい。
$ gem list psych *** LOCAL GEMS *** psych (2.0.15, 2.0.8)
バージョンがでかい方をuninstallしてみる。
gem uninstall psych -v 2.0.15
これで動いた。
$ pod install Updating local specs repositories ...
Vagrantで AWS EC2インスタンスを立ち上げる
はじめにvagantのプラグインをインストール
vagrant plugin install vagrant-aws vagrant plugin install dotenv
.envファイルに以下のようにawsの認証情報を記述する。
AWS_SECURITY_GROUPにはセキュリティグループ名ではなくIDを記述する。
AWS_SSH_USERNAME="ec2-user" AWS_SSH_KEY=xxxxxxxx.pem AWS_ACCESS_KEY_ID="" AWS_SECRET_ACCESS_KEY="" AWS_KEYPAIR_NAME="" AWS_SECURITY_GROUP="sg-xxxxxx" AWS_SUBNET_ID="subnet-xxxxxx"
Vagrantの内容は以下のとおり
# -*- mode: ruby -*- # vi: set ft=ruby : Dotenv.load ENV['VAGRANT_DEFAULT_PROVIDER'] = "aws" VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.provider :aws do |provider, override| override.vm.hostname = "vagrant" override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box" override.vm.box = "aws" override.ssh.username = ENV['AWS_SSH_USERNAME'] override.ssh.private_key_path = ENV['AWS_SSH_KEY'] override.ssh.pty = false provider.access_key_id = ENV['AWS_ACCESS_KEY_ID'] provider.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'] provider.keypair_name = ENV['AWS_KEYPAIR_NAME'] provider.region = "ap-northeast-1" provider.availability_zone = "ap-northeast-1a" provider.ami = "ami-c9562fc8" provider.instance_type = "t1.micro" provider.instance_ready_timeout = 120 provider.terminate_on_shutdown = false provider.security_groups = [ ENV['AWS_SECURITY_GROUP'], ] provider.tags = { "Name" => "vagrant", "Description" => "vagrant-aws", } provider.block_device_mapping = [{ "DeviceName" => "/dev/sda1", "VirtualName" => "VagrantDisk", "Ebs.VolumeSize" => "8", "Ebs.DeleteOnTermination" => true, "Ebs.VolumeType" => "standard", }] provider.associate_public_ip = 'true' provider.subnet_id = ENV['AWS_SUBNET_ID'] provider.private_ip_address = "x.x.x.x" provider.elastic_ip = false override.vm.synced_folder "./", "/vagrant", disabled: true end end
最後にvagrant upする。
vagrant up --provider=aws
Cocoacontrolsにライブラリを登録する
こちらで書いたのですが、iosのライブラリをcocoapodsに登録したのでcocoacontrolsにも登録してみした。
cocoacontrolsはios,osxのUI系のライブラリをを掲載しているサービスです。登録申請すれば誰でも掲載してもらえる可能性があります。
申請方法は画面右上のSubmit a new Controlボタンを押して掲載して欲しいライブラリのURL,詳細情報を入力するだけです。
今回は申請後5日ほどで掲載されました。多くの開発者が見ているサービスなので掲載できればそれだけ多くの方に知ってもらうことができます。上記の通り簡単に申請できますので作ったらとりあえず申請するのが良いと思います。
最後に今回掲載して頂いたライブラリはこちらです。
OYSimpleAlertController for iOS - Cocoa Controls
error: failed to import bridging headerとuse_frameworks!
swiftで書かれたライブラリをCocoaPodsでinstallする場合は
use_frameworks!
とpodfileに書かないと以下の警告が出ます。
[!] Pods written in Swift can only be integrated as frameworks; this feature is still in beta. Add `use_frameworks!` to your Podfile or target to opt into using it.
書いてある通り、swiftライブラリはframeworkを作成して統合されます。
通常objective-cライブラリはstatic libraryが作成されるのですが、use_frameworks!を書くと全てのライブラリをswiftの場合と同様にframeworkとしてリンクしようとするようです。
このためにuse_frameworks!を書いてobjective-cライブラリをbridging-header.hでimportするとエラーが発生します。
エラー内容はこんな感じです。
error: 'xxxxxxxx.h' file not found error: failed to import bridging header
回避策ですが、bridging-header.hから
#import "xxxxxxx.h"
を削除してライブラリを使用するswiftファイルに
import xxxxxxxxx
を追加すれば良いです。