0

OS Xで ruby​​Motion を使用してキーチェーンからパスワードを取得しようとしています

私はこれを試しました:

#   passsword_data_pointer=Pointer.new(:object) #works but empty password
#   password_data_pointer=Pointer.new('^') #makes ruby crash and complain 'Can't find pointer description for type '^'
    password_data=NSMutableData.new #works but empty password

    password_length = Pointer.new('I')
    result=SecKeychainFindGenericPassword (
                                           nil,
                                           "some_service_string".length,
                                           "some_service_string",
                                           "some_username_string".length,
                                           "some_username_string",
                                           password_length,
                                           password_data_pointer,#or password_data.bytes
                                           nil
                                           )

#    password_string=NSMutableData.dataWithBytes(password_data.bytes, length:password_length[0])
    password_string=NSMutableData.dataWithBytes(password_data_pointer, length:password_length[0])

    p password_string

私が何をしても、パスワードを取得する方法はありません。

助けてください ; インターネットには macruby や cocoa、c の例がたくさんありますが、このトピックに関する ruby​​motion の例は何もありません。

4

1 に答える 1

1

私は SecKeychainFindGenericPassword にあまり詳しくありませんが、RubyMotion Project Management Guideで説明されているように、キーチェーンを使用するには適切な資格を設定する必要があることは知っています。

したがって、Rakefile に次の行があることを確認してください。

app.entitlements['keychain-access-groups'] = [
  app.seed_id + '.' + app.identifier
]

キーチェーンへのより優れたインターフェイスが必要な場合は、 Cocoapodsを介してプルできるSSKeychainココア ラッパーを使用します。

Gemfile で:

gem 'cocoapods',        '~> 0.23.0'
gem 'motion-cocoapods', '~> 1.3.6'

また、Rakefile で:

app.pods do
  pod 'SSKeychain', '~> 1.2.0'
end

SSKeychain で機密データを保存および取得するために使用するラッパーの簡易バージョンを次に示します。

class CredentialStore
  SERVICE = 'YOUR_APP_NAME'

  def set_secure_value(value, for_key: key)
    if value
      SSKeychain.setPassword(value, forService: SERVICE, account: key)
    else
      SSKeychain.deletePasswordForService(SERVICE, account: key)
    end
  end

  def secure_value_for_key(key)
    SSKeychain.passwordForService(SERVICE, account: key)
  end
end

ご不明な点がございましたら、お気軽にお問い合わせください。幸運を!

于 2013-08-15T17:43:10.317 に答える