2016-01-29 3 views
0

Я пытаюсь написать приложение для iPhone с помощью Apple Private API. Это предназначено только для личного разработчика. Он не будет отправлен в магазин приложений, поэтому мне не нужно беспокоиться об отказе.Получение ошибок компиляции при использовании Private API в XCode

Я следовал инструкциям в этом видео, но я не совсем уверен, как исправить эти ошибки компиляции:

enter image description here

Вот ссылка Youtube: https://www.youtube.com/watch?v=OLX7b_KZIvg

Они являются шаги для получения этих ошибок, если вы не хотите смотреть видео на Youtube:

  1. Загрузить приватные заголовки Framework из этого ур л: https://github.com/kennytm/iphone-private-frameworks/tree/master
  2. Распаковать скаченный файл
  3. Скопируйте нужный класс в путь Xcode PrivateFrameworks, мой путь: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS .sdk/System/Library/PrivateFrameworks (я использовал TelephonyUtilities.framework)
  4. Создать новый проект в Xcode (я использую версию 7.2)
  5. Перейти к Project/построить настройки и установить «рамки поиска путей "значение /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/PrivateFrameworks (Возможно, вы немного отличаетесь лор путь)
  6. Go Project/Общие и добавить библиотеку TelephonyUtilities.framework в «Связанные Каркасы и библиотеки» раздела

Примечание: 1. На данный момент, вы должны быть в состоянии построить без ошибок 2. Также следует увидеть частную структуру в папке проекта на левой панели.

  1. Теперь, если вы добавите заголовок в ViewController.h в проект и выполните сборку, вы получите приведенные выше ошибки.

Вот мой ViewController.h файл:

#import <UIKit/UIKit.h> 
#include <TelephonyUtilities/TUCallCenter.h> // <<<<< This line causes the compilation errors 

@interface ViewController : UIViewController 


@end 

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

Любая помощь или указатель для решения этой проблемы будут оценены.

Благодаря

+0

Возможно, вы смогли ответить на вызов автоматически, используя этот частный API. –

+0

Прошло некоторое время, когда я попробовал еще раз, но я не верю, что когда-либо исправил его. – Will

ответ

0

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

Вот изменения в файл заголовок TUCallCenter.h:

/* Generated by RuntimeBrowser 
    Image: /System/Library/PrivateFrameworks/TelephonyUtilities.framework/TelephonyUtilities 
*/ 

#include "TUCallModelState.h" // <<< Had to add this because TUCallModelState is used below 

@interface TUCallCenter : NSObject { 
    TUCallModelState *_callModelState; 
} 

//@property (nonatomic, readonly, retain) TUCall *activeVideoCall; 
//@property (nonatomic, readonly) BOOL anyCallIsEndpointOnCurrentDevice; 
//@property (nonatomic, readonly) BOOL anyCallIsHostedOnCurrentDevice; 
//@property (nonatomic, readonly) unsigned int callCountOnDefaultPairedDevice; 
//@property (nonatomic, readonly, copy) NSArray *callGroupsOnDefaultPairedDevice; 
@property (nonatomic, retain) TUCallModelState *callModelState; 
//@property (nonatomic, readonly, copy) NSArray *callsHostedElsewhere; 
//@property (nonatomic, readonly, copy) NSArray *callsHostedOrAnEndpointElsewhere; 
//@property (nonatomic, readonly, copy) NSArray *callsOnDefaultPairedDevice; 
//@property (nonatomic, readonly, copy) NSArray *callsWithAnEndpointElsewhere; 
//@property (nonatomic, readonly, copy) NSArray *conferenceParticipantCalls; 
//@property (nonatomic, readonly) unsigned int currentAudioAndVideoCallCount; 
//@property (nonatomic, readonly, copy) NSArray *currentAudioAndVideoCalls; 
//@property (nonatomic, readonly) unsigned int currentCallCount; 
//@property (nonatomic, readonly, retain) NSArray *currentCallGroups; 
//@property (nonatomic, readonly, copy) NSArray *currentCalls; 
//@property (nonatomic, readonly, retain) TUCall *currentVideoCall; 
//@property (nonatomic, readonly) unsigned int currentVideoCallCount; 
//@property (nonatomic, readonly, copy) NSArray *currentVideoCalls; 
//@property (nonatomic, readonly, copy) NSArray *displayedCalls; 
//@property (nonatomic, readonly, retain) TUCall *incomingCall; 
//@property (nonatomic, readonly, copy) NSArray *incomingCalls; 
//@property (nonatomic, readonly, retain) TUCall *incomingVideoCall; 
// 
//+ (id)_sharedInstanceWithDaemonDelegate:(id)arg1; 
//+ (BOOL)emergencyCallBackModeIsActive; 
+ (BOOL)isInCallServiceProcess; 
//+ (void*)sharedAddressBook; 
+ (id)sharedInstance; 
// 
//- (void).cxx_destruct; 
//- (id)_allCalls; 
//- (id)_callGroupsFromCalls:(id)arg1; 
//- (void)_callStatusChangedInternal:(id)arg1; 
//- (id)_dial:(id)arg1 callID:(int)arg2 service:(int)arg3 sourceIdentifier:(id)arg4 dialType:(int)arg5 uniqueProxyIdentifier:(id)arg6; 
//- (id)_dialWithRequest:(id)arg1 completion:(id /* block */)arg2; 
//- (void)_handleCallControlFailure:(id)arg1; 
//- (id)activeVideoCall; 
//- (BOOL)allCallsAreOfService:(int)arg1; 
//- (BOOL)allCallsPassTest:(id /* block */)arg1; 
//- (int)ambiguityState; 
- (void)answerCall:(id)arg1; 
//- (void)answerCall:(id)arg1 withSourceIdentifier:(id)arg2; 
//- (void)answerCall:(id)arg1 withSourceIdentifier:(id)arg2 wantsHoldMusic:(BOOL)arg3; 
//- (void)answerCallWithHoldMusic:(id)arg1; 
//- (BOOL)anyCallIsEndpointOnCurrentDevice; 
//- (BOOL)anyCallIsHostedOnCurrentDevice; 
//- (BOOL)anyCallPassesTest:(id /* block */)arg1; 
//- (id)audioAndVideoCallsWithStatus:(int)arg1; 
//- (id)audioOrVideoCallWithStatus:(int)arg1; 
//- (unsigned int)callCountOnDefaultPairedDevice; 
//- (id)callGroupsOnDefaultPairedDevice; 
//- (id)callModelState; 
//- (id)callPassingTest:(id /* block */)arg1; 
//- (id)callPassingTest:(id /* block */)arg1 sortedUsingComparator:(id /* block */)arg2; 
//- (id)callPassingTest:(id /* block */)arg1 withOptions:(unsigned int)arg2; 
//- (id)callWithCallUUID:(id)arg1; 
//- (id)callWithStatus:(int)arg1; 
//- (id)callWithUniqueProxyIdentifier:(id)arg1; 
//- (id)callsHostedElsewhere; 
//- (id)callsHostedOrAnEndpointElsewhere; 
//- (id)callsOnDefaultPairedDevice; 
//- (id)callsPassingTest:(id /* block */)arg1; 
//- (id)callsPassingTest:(id /* block */)arg1 returningNilForEmpty:(BOOL)arg2; 
//- (id)callsWithAnEndpointElsewhere; 
//- (id)callsWithStatus:(int)arg1; 
//- (BOOL)canInitiateCallForService:(int)arg1; 
//- (BOOL)canInitiateCalls; 
//- (BOOL)canInitiateVoicemailCall; 
//- (BOOL)canMergeCalls; 
//- (BOOL)canUseThumperOverRelayForIncomingAndOutgoingCalls; 
//- (id)conferenceCall; 
//- (id)conferenceParticipantCalls; 
//- (unsigned int)countOfCallsPassingTest:(id /* block */)arg1; 
//- (unsigned int)currentAudioAndVideoCallCount; 
//- (id)currentAudioAndVideoCalls; 
//- (unsigned int)currentCallCount; 
//- (id)currentCallGroups; 
//- (id)currentCalls; 
//- (id)currentVideoCall; 
//- (unsigned int)currentVideoCallCount; 
//- (id)currentVideoCalls; 
//- (void)dealloc; 
//- (id)dial:(id)arg1 callID:(int)arg2 service:(int)arg3; 
//- (id)dial:(id)arg1 callID:(int)arg2 service:(int)arg3 sourceIdentifier:(id)arg4 uniqueProxyIdentifier:(id)arg5; 
//- (id)dial:(id)arg1 service:(int)arg2; 
//- (id)dialEmergency:(id)arg1; 
//- (id)dialEmergency:(id)arg1 sourceIdentifier:(id)arg2; 
//- (id)dialVoicemail; 
//- (id)dialVoicemailWithSourceIdentifier:(id)arg1; 
//- (id)dialWithRequest:(id)arg1; 
//- (void)dialWithRequest:(id)arg1 completion:(id /* block */)arg2; 
//- (void)disconnectAllCalls; 
//- (void)disconnectCall:(id)arg1; 
//- (void)disconnectCall:(id)arg1 withReason:(int)arg2; 
//- (void)disconnectCurrentCallAndActivateHeld; 
//- (void)disconnectNonRelayingCalls; 
//- (void)disconnectRelayingCalls; 
//- (id)displayedCall; 
//- (id)displayedCallFromCalls:(id)arg1; 
//- (id)displayedCalls; 
//- (void)endActiveAndAnswerCall:(id)arg1; 
//- (void)endActiveOrHeldAndAnswerCall:(id)arg1; 
//- (void)endEmergencyCallBackMode; 
//- (void)endHeldAndAnswerCall:(id)arg1; 
//- (void)enteredBackgroundForAllCalls; 
//- (void)enteredForegroundForCall:(id)arg1; 
//- (void)enumerateCallsInvokingBlock:(id /* block */)arg1 forCallsPassingTest:(id /* block */)arg2; 
//- (void)enumerateCallsWithOptions:(unsigned int)arg1 invokingBlock:(id /* block */)arg2 forCallsPassingTest:(id /* block */)arg3; 
//- (id)frontmostAudioOrVideoCall; 
//- (id)frontmostCall; 
- (void)handleCallModelStateChanged:(id)arg1; 
//- (void)holdActiveAndAnswerCall:(id)arg1; 
//- (id)incomingCall; 
//- (id)incomingCalls; 
//- (id)incomingVideoCall; 
//- (id)initWithDaemonDelegate:(id)arg1; 
//- (BOOL)isAddCallAllowed; 
//- (BOOL)isAmbiguous; 
//- (BOOL)isEndAndAnswerAllowed; 
//- (BOOL)isHardPauseAvailable; 
//- (BOOL)isHoldAllowed; 
//- (BOOL)isHoldAndAnswerAllowed; 
//- (BOOL)isMergeable; 
//- (BOOL)isSendToVoicemailAllowed; 
//- (BOOL)isSwappable; 
//- (BOOL)isTakingCallsPrivateAllowed; 
//- (void)pullHostedCallsFromPairedHostDevice; 
//- (void)pullRelayingCallsFromClient; 
//- (void)pullThumperCallFromClientUsingInfo:(id)arg1 completion:(id /* block */)arg2; 
//- (void)pushHostedCallsToPairedClientDevice; 
//- (void)pushRelayingCallsToHost; 
//- (void)pushRelayingCallsToHostWithSourceIdentifier:(id)arg1; 
//- (void)resumeCall:(id)arg1; 
//- (void)sendFieldModeDigits:(id)arg1; 
//- (void)setCallModelState:(id)arg1; 
//- (void)swapCalls; 
//- (id)videoCallWithStatus:(int)arg1; 

@end 

Как вы можете видеть, только остались в нескольких функциях, и я смог построить и запустить.

+0

Вы использовали всю концепцию Framework или просто перетаскиваете файлы? – SwiftArchitect

+0

@SwiftArchitect - Боюсь, я не знаю, что такое концепция Framework. Однако я копировал и вставлял файлы в Finder. – Will

0
NSString *frameworkPath = @"/System/Library/PrivateFrameworks/TelephonyUtilities.framework"]; 
NSBundle *bundlePath = [NSBundle bundleWithPath: frameworkPath]; 
if ([bundlePath load]) { 
    Class TUCallCenter = NSClassFromString(@"TUCallCenter"); 
    tucallCenter = [TUCallCenter sharedInstance]; 
} 

Так вы динамически загружаете экземпляр TUCallCenter с помощью частных фреймворков.

Смежные вопросы