情報系人間のブログ

プログラミング、開発に関することを書いていきます。

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インスタンスを立ち上げる

vagrantAWS 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にも登録してみした。

reidr.hatenablog.com

cocoacontrolsios,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

を追加すれば良いです。