Build failure when trying to build SSCrypto framew

2019-08-01 05:05发布

问题:

Using Xcode 4, I'm attempting to build the SSCrypto framework for use with an iOS app.

In Build Settings, when I change the base SDK to Latest iOS, I get this error:

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

My googling and searching has turned up empty, so I feel I'm missing something obvious...

How do I get SSCrypto framework to work on iOS?

回答1:

For iOS only static libraries can be used, not frameworks with dynamic libraries.

Instead use CommonCrypto, it is plain C but not really hard to use. Do insure that you use all the same setting, mode, IV (if necessary for the mode), padding and key.

Add the Security.framework to the project

#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;
}

For Base64 see: SO answer



回答2:

Xcode 4 removed a lot of target types, presumably because Apple thought it was confusing people.

Build a static library instead, or just include the files in your project.