Metis
Metis

Reputation: 51

How do I import CommonCrypto into Swift 3?

The guidance is to to use #import "CommonCrypto/CommonCrypto.h" in the bridging header. This is from the question at: SHA256 in swift.
However, when I use the answers given by Andi and Graham Xcode still complains about "use of unresolved identifier CC_SHA256_DIGEST_LENGTH..."

I am thinking I've made one of two mistakes: Either (a) I am missing something in not having wired up the header and import correctly. i.e. I did not setup the bridging header correctly. I'd love clear steps on how to include the library and create the bridging header correctly. Or (b)The library is not included by default and I actually need to download it and store locally before I can use it. I'd love instructions on that.

Thanks.

Upvotes: 5

Views: 2792

Answers (2)

Lokesh SN
Lokesh SN

Reputation: 1593

Good news!: Swift 4(Xcode 10) has made CommonCrypto to be available for import by default!

This may not be helpful for you at Swift 3 but still, it's just FYI

Upvotes: 4

ha100
ha100

Reputation: 1592

better way in 8 steps

1) -------------------------------------------

go to xcode file inspector and select your project file and add a new target.

xcode file inspector

2) -------------------------------------------

select an aggregate from cross-platform section.

aggregate

3) -------------------------------------------

after you name it appropriately, select it from targets and go to build phases section.

build phases

4) -------------------------------------------

there select the plus button and create new run script phase with following code. it will generate appropriate module for each platform just before building and you will be able to import CommonCrypto even for simulator.

add script script code

mkdir -p "${SRCROOT}/Frameworks/CommonCrypto"
cat <<EOF > "${SRCROOT}/Frameworks/CommonCrypto/module.modulemap"
module CommonCrypto [system] {
    header "${SDKROOT}/usr/include/CommonCrypto/CommonCrypto.h"
    export *
}
EOF

5) -------------------------------------------

after this step go to your project target and actually link this aggregate to your build process

linkup

6) -------------------------------------------

select the aggregate

aggregate selection

7) -------------------------------------------

now still in the project target go to build settings and find "header search paths" and insert this path to be traversed for the newly generated module

${SRCROOT}/Frameworks/CommonCrypto

header search paths

8) -------------------------------------------

now all you need to do is just

import CommonCrypto

somewhere and start using it.

hope it helps

Upvotes: 2

Related Questions