2011-09-07 113 views
1

使用Xcode 4时,我试图构建用于iOS应用程序的SSCrypto框架。尝试构建用于iOS的SSCrypto框架时构建失败

在生成设置,当我改变基地SDK到最新的iOS,我得到这个错误:

target specifies product type 'com.apple.product-type.framework', but there's no such product type for the 'iphoneos' platform 

我的谷歌搜索和搜索已经变成了空的,所以我觉得我失去了一些东西明显.. 。

如何让SSCrypto框架在iOS上工作?

+0

你特别需要什么加密函数? – zaph

+0

解码base64字符串,然后解密字符串。这些字符串使用OpenSSL(AES-256)加密。 –

+0

CommonCrypto(包含在iOS中)将轻松处理AES-256。对于Base64请参阅:http://stackoverflow.com/questions/392464/any-base64-library-on-iphone-sdk/800976#800976 – zaph

回答

2

对于iOS,只能使用静态库,而不能使用具有动态库的框架。

取而代之的是使用CommonCrypto,它是普通的C但不是很难使用。确保您使用所有相同的设置,模式,IV(如果模式需要),填充和键。

添加Security.framework到项目

#import <CommonCrypto/CommonCryptor.h> 

+ (NSData *)doCipher:(NSData *)dataIn 
        iv:(NSData *)iv 
       key:(NSData *)symmetricKey 
      context:(CCOperation)encryptOrDecrypt 
{ 
    CCCryptorStatus ccStatus = kCCSuccess; 
    size_t   cryptBytes = 0; // Number of bytes moved to buffer. 
    NSMutableData *dataOut = [NSMutableData dataWithLength:dataIn.length + kCCBlockSizeAES256]; 

    ccStatus = CCCrypt(encryptOrDecrypt, 
         kCCAlgorithmAES256, 
         kCCOptionPKCS7Padding, 
         symmetricKey.bytes, 
         kCCKeySizeAES256, 
         iv.bytes, 
         dataIn.bytes, 
         dataIn.length, 
         dataOut.mutableBytes, 
         dataOut.length, 
         &cryptBytes); 

    if (ccStatus != kCCSuccess) { 
     // Handle error 
     NSLog(@"CCCrypt status: %d", ccStatus); 
    } 

    dataOut.length = cryptBytes; 

    return dataOut; 
} 

对于Base64的看到:SO answer

+0

不技术上的真实;如果你跳过足够的箍环,你可以(也可以)构建和使用动态库。没有多少意义,因为lib不会与其他应用程序共享,所以它可能是静态的,除非它是LGPL等。 –

+0

@CocoaFu哇,这太棒了。但是,Xcode不识别CCOperation。我需要在头文件中导入什么? –

0

的Xcode 4去掉了很多目标类型的,大概是因为苹果认为这是令人困惑的人。

改为创建一个静态库,或者只是将文件包含在您的项目中。

+0

试图仅包含这些文件:Building for iOS不允许链接SSCrypto需要的libssl.dylib或libcrypto.dylib。嗯... –

+1

有问题,那么:iOS不包括OpenSSL(据我所知)。你也可以建立它,但它会变得混乱... –