2015-12-21 2 views
2

Итак, я в основном пишу в swift, но кажется, что единственный способ назвать это «AudioServicesPlaySystemSoundWithVibration» - в Objective-c ... В начале код Я написал, сделал работу, я не уверен, что изменилось, но это дает мне ошибку «Неявное объявление функции» AudioServicesPlaySystemSoundWithVibration «теперь недействительно в C99» вместо простого предупреждения. То же предупреждение и заголовок ошибки, но теперь, когда это ошибка, я не могу скомпилировать. Да, я знаю, что я использую частный API, но я не планирую продавать приложение, поэтому мне все равно, что думает яблоко. Мне просто нужно, чтобы пользователь вибрировал. Две функции vibrateMutate и vibrateSection вызываются в отдельных быстрых файлах, и я помещаю «import vibrate.h» в заголовок Bridging Header, который я создавал, когда создавал свои объектные файлы c. Вот мой код :)Неявная декларация функции «AudioServicesPlaySystemSoundWithVibration» неверна в ошибке C99

//vibrate.h FILE NAME 

#ifndef vibrate_h 
#define vibrate_h 
@interface Vibrate : NSObject 

+ (void)vibrateMutate; 
+ (void)vibrateSectionChange; 

@end 



#endif /* vibrate_h */ 

// vibrate.m FILE NAME 

#import <Foundation/Foundation.h> 
#import <AudioToolbox/AudioServices.h> 
#import <AudioToolbox/AudioToolbox.h> 

#import "vibrate.h" 

@implementation Vibrate 

+ (void) vibrateMutate 
{ 
NSMutableDictionary* dict = [NSMutableDictionary dictionary]; 
NSMutableArray* arr = [NSMutableArray array ]; 

[arr addObject:[NSNumber numberWithBool:YES]]; 
[arr addObject:[NSNumber numberWithInt:50]]; 

[arr addObject:[NSNumber numberWithBool:NO]]; 
[arr addObject:[NSNumber numberWithInt:10]]; 


[dict setObject:arr forKey:@"VibePattern"]; 
[dict setObject:[NSNumber numberWithDouble:.25] forKey:@"Intensity"]; 

AudioServicesPlaySystemSoundWithVibration(4095,nil,dict); //ERROR 
} 

+ (void) vibrateSectionChange 
{ 
NSMutableDictionary* dict = [NSMutableDictionary dictionary]; 
NSMutableArray* arr = [NSMutableArray array ]; 

[arr addObject:[NSNumber numberWithBool:YES]]; 
[arr addObject:[NSNumber numberWithInt:150]]; 

[arr addObject:[NSNumber numberWithBool:NO]]; 
[arr addObject:[NSNumber numberWithInt:10]]; 


[dict setObject:arr forKey:@"VibePattern"]; 
[dict setObject:[NSNumber numberWithDouble:.75] forKey:@"Intensity"]; 

AudioServicesPlaySystemSoundWithVibration(4095,nil,dict); 
} 

@end 

ответ

2

Если вы знаете, что звонок правильный и просто хотите удовлетворить компилятор, вы можете дать четкое определение в своем коде. Я не знаю, какое правильное определение частной функции есть, но следующее должно работать, если вы не заботитесь о том, чтобы быть точным.

void AudioServicesPlaySystemSoundWithVibration(int, id, id); 

@implementation Vibrate 
// ... 
1

Просто для записи, чтобы добавить дополнительную ценность в хороший ответ на @PhilipMills, Apple Store никогда не будет принимать каких-либо бинарный файл, который ссылается на непубличные символы любого Apple, или частные API. Они автоматически отклонять бинарник со следующим сообщением: Использование

Непубличного API:

  • ссылки приложения непубличных символы Justin Mobile: _AudioServicesPlaySystemSoundWithVibration

Если метод имена в исходном коде соответствуют частным API Apple , перечисленным выше, изменение имен методов поможет предотвратить это приложение от флага d в будущих материалах. Кроме того, обратите внимание, что один или более из вышеперечисленных API-интерфейсов может быть расположен в статической библиотеке, которая была включена в ваше приложение . Если это так, их необходимо удалить.

+1

Спасибо за ввод, да, мы знаем, что мы не сможем представить в App Store, но это был личный проект, поэтому мы не слишком беспокоились об этом. :) –

+0

Не беспокойтесь, я знаю, что вы упомянули в своем вопросе, но всегда есть отвлеченные люди, которые не знают последствий, и, возможно, это может сэкономить некоторое время ;-) – GoRoS

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