Как мне создать новую платформу iOS, соответствующую моим потребностям?

Это мой первый вопрос, и я чувствую себя дураком, не найдя ответа, поскольку я сильно подозреваю, что на что-то подобное уже был дан ответ, но мой гугл-фу подвел меня.

Чего я хочу добиться, так это создать структуру, которую я могу добавить в свои приложения, чтобы я мог получить доступ к структурам из каждого класса, который я создаю. Например, к CGRect можно получить доступ из любого класса, который я создаю, потому что (я думаю) каждый класс включает в себя Foundation Framework, или когда я создаю контроллер представления, я могу использовать UIButtons, потому что они расположены в UIKit Framework, который впоследствии извлекает Foundation Framework и CoreGraphics Framework.

Мне нужен файл, куда я могу вставлять структуры или пользовательские объекты, которые мне будет интересно использовать снова и снова. то есть CGPoint из CoreGraphics Framework:

struct CGPoint {
  CGFloat x;
  CGFloat y;
};
typedef struct CGPoint CGPoint;

Я бы хотел Framework, в который я мог бы добавлять такие вещи, как определение месяца

typedef enum {
    Jan = 1,
    Feb = 2,
    Mar = 3,
    Apr = 4,
    May = 5,
    Jun = 6,
    Jul = 7,
    Aug = 8,
    Sep = 9,
    Oct = 10,
    Nov = 11,
    Dec = 12,
} SSMonth;

Я думаю, что в C я бы добился этого, создав файл заголовка и просто включив этот файл заголовка во все другие файлы, которые используют приведенный выше пример SSMonth. Было бы лучше достичь этой цели аналогичным образом для проекта iOS, или лучше было бы создать фреймворк? Предполагая, что я хотел расширить его за пределы структур и определений типов и хотел включить фактические классы; будет ли ответ таким же?


person Brad B.    schedule 13.12.2013    source источник
comment
Это кажется тяжелой задачей. Я уверен, что инструмент уже есть. Что за гугл-фу пробовал? некоторые вопросы просто сложно задать, так как Google их подтянет. (погуглите изображения копий и получите поп-звезду больше, чем оружие...)   -  person Plasmarob    schedule 14.12.2013
comment
Если вы хотите создать статическую библиотеку, воспользуйтесь этим учебным пособием может быть полезно (хотя, возможно, излишне)   -  person Rich Tolley    schedule 14.12.2013
comment
Большое спасибо за предложение ссылки, Рич Толли! На данном этапе это излишество, но я добавил эту ссылку в избранное, чтобы иметь возможность расширить ее в будущем. Plasmarob, я полностью самоучка, когда дело доходит до программирования (знаю несколько языков!), поэтому мой гугл-фу, как правило, довольно хорош в поиске материала. Теперь, когда я знаю ключевой термин, который я ищу для статических библиотек, я надеюсь, что смогу найти еще несколько руководств и документации.   -  person Brad B.    schedule 14.12.2013


Ответы (2)


Вы можете добавить файл в AppName-Prefix.pch файл

//
//  Prefix header
//
//  The contents of this file are implicitly included at the beginning of every source file.
//

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import "CustomClass.h"
#endif

Затем в CustomClass поместите объекты, к которым вы хотите иметь доступ.

person Ríomhaire    schedule 13.12.2013
comment
Скажем, я редактирую файл AppName-Prefix.pch, чтобы включить BBStructs.h. Придется ли мне вернуться и отредактировать все уже существующие классы, чтобы включить BBStructs.h, или это не нужно из-за порядка компиляции? - person Brad B.; 14.12.2013
comment
stackoverflow.com/questions/6462288/ - person Ríomhaire; 14.12.2013
comment
Riomhaire, вы ответили на мой вопрос к herzbube ниже. Спасибо! - person Brad B.; 14.12.2013

Я хотел бы немного расширить ответ Риомхейра: файл, о котором он говорит, представляет собой предварительно скомпилированный заголовочный файл (расширение .pch является аббревиатурой). Предварительно скомпилированные файлы заголовков обрабатываются компилятором только один раз в начале сборки вашего проекта, затем они автоматически импортируются во все остальные файлы вашего проекта без необходимости явно писать

#import "Prefix.pch"

Основная цель предварительно скомпилированных заголовочных файлов заключается в том, что они ускоряют время сборки вашего проекта, потому что компилятору не нужно снова и снова обрабатывать одни и те же — возможно, большие — заголовочные файлы. Тот факт, что вам не нужно явно везде импортировать файл .pch, — это просто удобство, предоставляемое вам Xcode. В других средах программирования (например, Microsoft Visual Studio) вам может потребоваться явно включить предварительно скомпилированный заголовочный файл.

Google для «предварительно скомпилированного заголовка», чтобы узнать больше о концепции (которая не ограничивается Objective-C). Для краткости вот ссылка на статью Википедии.

person herzbube    schedule 14.12.2013
comment
Большое спасибо, Герцбубе! Это на самом деле вызывает вопрос. Если это предварительно скомпилированный файл заголовка, то почему Xcode импортирует то же самое, что файл .pch уже скомпилирован, когда я создаю новый контроллер представления? то есть файл .pch имеет #import ‹UIKit/UIKit.h›, и когда я создаю новый контроллер представления, он ТАКЖЕ имеет #import ‹UIKit/UIKit.h›. Не могли бы вы дать некоторое представление о причине увольнения? - person Brad B.; 14.12.2013
comment
@БрэдБ. Чтобы пропустить оператор импорта, Xcode должен будет проверить 1) есть ли в вашем проекте предварительно скомпилированный заголовочный файл (он не требуется); и 2) содержит ли этот файл импорт UIKit.h. Гораздо проще просто добавить оператор импорта, а затем позволить вам решить, хотите ли вы удалить этот оператор или нет. Можно сказать, что лучше перестраховаться, чем потом сожалеть :-) - person herzbube; 14.12.2013