Respostas:
Eu suspeito por causa de módulos, que removem a necessidade do #import <Cocoa/Cocoa.h>
.
Quanto a onde colocar o código que você colocaria em um cabeçalho de prefixo, não há código que você deve colocar em um cabeçalho de prefixo. Coloque suas importações nos arquivos que precisam deles. Coloque suas definições em seus próprios arquivos. Coloque suas macros ... em lugar nenhum. Pare de escrever macros, a menos que não exista outra maneira (como quando você precisar __FILE__
). Se você precisar de macros, coloque-as em um cabeçalho e inclua-o.
O cabeçalho do prefixo era necessário para coisas enormes e usadas por quase tudo em todo o sistema (como Foundation.h
). Se você tem algo tão grande e onipresente, deve repensar sua arquitetura. Os cabeçalhos de prefixo dificultam a reutilização do código e introduzem sutis problemas de compilação, se algum dos arquivos listados puder mudar. Evite-os até que você tenha um sério problema de tempo de compilação que possa demonstrar que é dramaticamente aprimorado com um cabeçalho de prefixo.
Nesse caso, você pode criar um e passá-lo ao clang, mas é incrivelmente raro que seja uma boa ideia.
EDIT: Para sua pergunta específica sobre um HUD que você usa em todos os seus controladores de exibição, sim, você deve absolutamente importá-lo para todos os controladores de exibição que realmente o usam. Isso torna as dependências claras. Quando você reutilizar seu controlador de exibição em um novo projeto (o que é comum se você criar bem seus controladores), você saberá imediatamente o que ele requer. Isso é especialmente importante para categorias, que podem dificultar a reutilização do código se estiverem implícitas.
O arquivo PCH não existe para se livrar das listagens de dependências. Você ainda deve importar UIKit.h
ou Foundation.h
conforme necessário, como os modelos do Xcode. O motivo do PCH é melhorar os tempos de compilação ao lidar com cabeçalhos realmente enormes (como no UIKit).
TWAPIManager.m
, por exemplo, para outro projeto, você receberá erros que TWALog()
não estão definidos, sem nenhuma dica sobre onde encontrá-lo. Eu encontrei exatamente esse problema em vários projetos grandes tentando compartilhar código. Criar TWAPILog.h
e importar resolve isso com um custo dev trivial.
Sem a pergunta se é apropriado ou não, você pode adicionar o arquivo PCH manualmente:
Inclua um novo arquivo PCH no projeto: Novo arquivo> Outro> Arquivo PCH .
Na opção Configurações de compilação do destino , defina o valor do cabeçalho do prefixo como o nome do arquivo PCH, com o nome do projeto como prefixo (ou seja, para o projeto nomeado TestProject
e o arquivo PCH nomeado MyPrefixHeaderFile
, adicione o valor TestProject/MyPrefixHeaderFile.pch
ao plist).
DICA: você pode usar coisas como $(SRCROOT)
ou $(PROJECT_DIR)
para chegar ao caminho de onde você colocou .pch
o projeto.
Na opção Configurações de compilação do destino , defina o valor de Precompile Prefix Header como YES
.
Você precisa criar seu próprio arquivo PCH
AdicionarNew file -> Other-> PCH file
Em seguida, adicione o caminho deste arquivo PCH à sua compilação setting->prefix header->path
($ (SRCROOT) /filename.pch)
$(PRODUCT_DIR)/$(PRODUCT_NAME)/PrefixHeader.pch
Para adicionar arquivo .pch-
1) Adicione um novo arquivo .pch ao seu projeto-> Novo arquivo-> outro-> arquivo PCH
2) Vá para a configuração de compilação do seu projeto.
3) Pesquise "cabeçalho de prefixo". Você pode encontrar isso em Apple LLVM.
4) Cole isso no campo $(SRCROOT)/yourPrefixHeaderFileName.pch
5) Limpe e construa o projeto. É isso aí!!!
Se você decidir adicionar um arquivo .pch manualmente e quiser usar o Objective-C como antes no xCode 6, também será necessário importar as estruturas UIKit e Foundation no arquivo .pch. Caso contrário, você precisará importar essas estruturas manualmente em cada arquivo de cabeçalho. Você pode adicionar o seguinte código de qualquer maneira, pois ele testa o idioma usado:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
Usar :
$ (PROJECT_DIR) / Nome do projeto / PrefixHeader.pch
Para adicionar novo arquivo PCH, siga as etapas abaixo:
(1) Adicionar novo visual - selecione iOS - Outro e arquivo PCH
(2) adicione o caminho desse arquivo PCH ao seu projeto - BuildSetting - Apple LLVM 6.0 Language
Adicionar caminho do cabeçalho do prefixo definido Seu Nome da Aplicação (caminho da raiz) / nome do arquivo.pch