Как построить и использовать библиотеку C в проекте iOS? - PullRequest
2 голосов
/ 12 мая 2019

Я новичок в программировании на iOS. У меня есть приложение для Android, которое использует библиотеку c. Я хочу создать то же приложение для iOS и использовать ту же библиотеку. Я ищу по этому поводу, но большинство результатов относится к программированию target-c, и есть разные методы, из которых я не могу выбрать. Я полагаю, что с новыми функциями я могу сделать это намного быстрее. Итак, мой вопрос: как мне создать библиотеку C и использовать ее в проекте iOS? Могу ли я использовать cmake? Должен ли я использовать менеджер пакетов Swift, как указано в первой ссылке ниже?

лучший результат, который я нашел в интернете:

  1. https://medium.com/shopify-mobile/wrapping-a-c-library-in-swift-part-1-6dd240070cef
  2. Компиляция внешней библиотеки C ++ для использования с проектом iOS

1 Ответ

3 голосов
/ 12 мая 2019

Xcode может скомпилировать код C без дополнительных настроек. Просто добавьте ваши C файлы в проект и выберите правильную цель.

Чтобы использовать C-код в Swift, вы должны создать соединительный заголовок.

Вот пример того, как использовать C и Swift в одном проекте с нуля. Вы можете сделать то же самое с вашим существующим кодом C.

  1. Создать новый проект iOS.
  2. Добавьте файл C, нажав команду + N. Выберите файл C с заголовком. C file
  3. Xcode должен предложить добавить заголовок моста и создать его автоматически. Если этого не происходит, вы можете сделать это вручную, создав заголовочный файл и добавив его имя для создания настроек проекта. Bridging header Build settings
  4. Добавить некоторую функцию в файл C. Например:

     // example.h
     #include <stdio.h>
     int exampleMax(int num1, int num2);
    
     // example.c
     #include "example.h"
    
     int exampleMax(int num1, int num2)
     {
         int result;
         if (num1 > num2)
             result = num1;
         else
             result = num2;
         return result; 
     }
    
  5. Добавление заголовка C в файл моста:

     // ModuleName-Bridging-Header.h
     #import "example.h"
    
  6. Теперь вы можете использовать код C в файлах Swift:

     import UIKit
    
     class ViewController: UIViewController {
         override func viewDidLoad() {
             super.viewDidLoad()
             let number1 = Int32(1)
             let number2 = Int32(5)
             let result = exampleMax(number1, number2)
             print("min = \(result)")
         }
     }
    

Автозаполнение должно видеть ваш заголовок C:

Auto completion

Вместо заголовка моста вы можете использовать файл modulemap. Он более гибкий и удобный, но немного сложнее в настройке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...