diff --git a/.gitmodules b/.gitmodules index 53f206076..38bfa07df 100644 --- a/.gitmodules +++ b/.gitmodules @@ -66,6 +66,7 @@ [submodule "submodules/cunit"] path = submodules/cunit url = git://git.linphone.org/cunit.git + ignore = dirty [submodule "submodules/externals/openh264"] path = submodules/externals/openh264 url = https://github.com/cisco/openh264 @@ -76,3 +77,7 @@ [submodule "submodules/mswebrtc"] path = submodules/mswebrtc url = git://git.linphone.org/mswebrtc.git +[submodule "Classes/KIF"] + path = Classes/KIF + url = https://github.com/kif-framework/KIF.git + branch = origin/v3.1.2 diff --git a/.travis.yml b/.travis.yml index 3a22f99d2..0cc6d6898 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -xcode_project: linphone.xcworkspace +xcode_project: linphone.xcodeproj xcode_scheme: linphone git: @@ -8,20 +8,15 @@ git: env: global: - VERSION="8.1" - - KIF_SCREENSHOTS="${TRAVIS_BUILD_DIR}/Screenshots" + - BYPASS_TOOLCHECK=1 install: - cd submodules/build - make download-sdk - cd ../.. - - pod install + - git submodule update --init Classes/KIF + - git submodule update --init --recursive submodules/linphone - ls -la script: - - export KIF_SCREENSHOTS=$TRAVIS_BUILD_DIR/Screenshots - - mkdir -p "$KIF_SCREENSHOTS" - - echo $KIF_SCREENSHOTS - - xcodebuild -scheme linphone -workspace linphone.xcworkspace -sdk iphonesimulator8.1 test - -after_failure: - - ls -la $KIF_SCREENSHOTS \ No newline at end of file + - xcodebuild -scheme linphone -project linphone.xcodeproj -sdk iphonesimulator8.1 test diff --git a/.tx/config b/.tx/config index 7c4b5d562..cf79ceeeb 100644 --- a/.tx/config +++ b/.tx/config @@ -1,6 +1,5 @@ [main] host = https://www.transifex.com -lang_map = fr_CA:fr-rCA,pt_BR:pt-rBR,zh_CN:zh-rCN,zh_HK:zh-rHK,zh_TW:zh-rTW,da_DK:da-rDK,sv_SE:sv-rSE,kn_IN:kn-rIN,nl_NL:nl-rNL,en_NL:en-rNL minimum_perc = 1 [linphone-ios.localizablestrings] diff --git a/Classes/Base.lproj/ChatRoomViewController.strings b/Classes/Base.lproj/ChatRoomViewController.strings index a05025f33..e43729de3 100644 Binary files a/Classes/Base.lproj/ChatRoomViewController.strings and b/Classes/Base.lproj/ChatRoomViewController.strings differ diff --git a/Classes/Base.lproj/HistoryDetailsViewController.strings b/Classes/Base.lproj/HistoryDetailsViewController.strings index 2954ead48..9ea355e8d 100644 Binary files a/Classes/Base.lproj/HistoryDetailsViewController.strings and b/Classes/Base.lproj/HistoryDetailsViewController.strings differ diff --git a/Classes/Base.lproj/IncomingCallViewController.strings b/Classes/Base.lproj/IncomingCallViewController.strings index c3aa723a5..1ea6da905 100644 Binary files a/Classes/Base.lproj/IncomingCallViewController.strings and b/Classes/Base.lproj/IncomingCallViewController.strings differ diff --git a/Classes/Base.lproj/IncomingCallViewController~ipad.strings b/Classes/Base.lproj/IncomingCallViewController~ipad.strings index db1fb0f94..c82d0111a 100644 Binary files a/Classes/Base.lproj/IncomingCallViewController~ipad.strings and b/Classes/Base.lproj/IncomingCallViewController~ipad.strings differ diff --git a/Classes/Base.lproj/WizardViews.strings b/Classes/Base.lproj/WizardViews.strings index 1f22b0423..8083292b3 100644 Binary files a/Classes/Base.lproj/WizardViews.strings and b/Classes/Base.lproj/WizardViews.strings differ diff --git a/Classes/ChatTableViewController.m b/Classes/ChatTableViewController.m index f47aca591..429209d86 100644 --- a/Classes/ChatTableViewController.m +++ b/Classes/ChatTableViewController.m @@ -38,11 +38,11 @@ [super dealloc]; } - #pragma mark - ViewController Functions - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; + self.tableView.accessibilityIdentifier = @"ChatRoom list"; [self loadData]; } diff --git a/Classes/ContactDetailsTableViewController.h b/Classes/ContactDetailsTableViewController.h index d4ed1da3e..c51db7bab 100644 --- a/Classes/ContactDetailsTableViewController.h +++ b/Classes/ContactDetailsTableViewController.h @@ -25,6 +25,15 @@ #import "UIContactDetailsHeader.h" #import "UIContactDetailsFooter.h" + +typedef enum _ContactSections { + ContactSections_None = 0, + ContactSections_Number, + ContactSections_Sip, + ContactSections_Email, + ContactSections_MAX +} ContactSections_e; + @interface ContactDetailsTableViewController : UITableViewController { @private NSMutableArray *dataCache; diff --git a/Classes/ContactDetailsTableViewController.m b/Classes/ContactDetailsTableViewController.m index 9be9e4e48..a85bd9cad 100644 --- a/Classes/ContactDetailsTableViewController.m +++ b/Classes/ContactDetailsTableViewController.m @@ -55,14 +55,6 @@ @implementation ContactDetailsTableViewController -typedef enum _ContactSections { - ContactSections_None = 0, - ContactSections_Number, - ContactSections_Sip, - ContactSections_Email, - ContactSections_MAX -} ContactSections_e; - static const ContactSections_e contactSections[ContactSections_MAX] = {ContactSections_None, ContactSections_Number, ContactSections_Sip, ContactSections_Email}; @synthesize footerController; @@ -124,6 +116,8 @@ static const ContactSections_e contactSections[ContactSections_MAX] = {ContactSe [super viewDidLoad]; [headerController view]; // Force view load [footerController view]; // Force view load + + self.tableView.accessibilityIdentifier = @"Contact numbers table"; } - (void)viewDidDisappear:(BOOL)animated { diff --git a/Classes/DialerViewController.h b/Classes/DialerViewController.h index 49e6d857c..d97d612df 100644 --- a/Classes/DialerViewController.h +++ b/Classes/DialerViewController.h @@ -27,7 +27,7 @@ #import "UITransferButton.h" #import "UIDigitButton.h" -@interface DialerViewController : UIViewController { +@interface DialerViewController : UIViewController { } - (void)setAddress:(NSString*)address; diff --git a/Classes/DialerViewController.m b/Classes/DialerViewController.m index 652e42947..c9480b922 100644 --- a/Classes/DialerViewController.m +++ b/Classes/DialerViewController.m @@ -22,6 +22,7 @@ #import "DialerViewController.h" #import "IncallViewController.h" +#import "DTAlertView.h" #import "LinphoneManager.h" #import "PhoneMainView.h" #import "Utils.h" @@ -276,6 +277,89 @@ static UICompositeViewDescription *compositeDescription = nil; } } +#pragma mark - Debug Functions +-(void)presentMailViewWithTitle:(NSString*)subject forRecipients:(NSArray*)recipients attachLogs:(BOOL)attachLogs { + if( [MFMailComposeViewController canSendMail] ){ + MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; + if( controller ){ + controller.mailComposeDelegate = self; + [controller setSubject:subject]; + [controller setToRecipients:recipients]; + + if( attachLogs ){ + char * filepath = linphone_core_compress_log_collection([LinphoneManager getLc]); + if (filepath == NULL) { + Linphone_err(@"Cannot sent logs: file is NULL"); + return; + } + NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; + NSString *filename = [appName stringByAppendingString:@".gz"]; + NSString *mimeType = @"text/plain"; + + if ([filename hasSuffix:@".gz"]) { + mimeType = @"application/gzip"; + filename = [appName stringByAppendingString:@".gz"]; + } else { + Linphone_err(@"Unknown extension type: %@, cancelling email", filename); + return; + } + [controller setMessageBody:NSLocalizedString(@"Application logs", nil) isHTML:NO]; + [controller addAttachmentData:[NSData dataWithContentsOfFile:[NSString stringWithUTF8String:filepath]] mimeType:mimeType fileName:filename]; + + ms_free(filepath); + + } + self.modalPresentationStyle = UIModalPresentationPageSheet; + [self.view.window.rootViewController presentViewController:controller animated:TRUE completion:^{}]; + [controller release]; + } + + } else { + UIAlertView* alert = [[UIAlertView alloc] initWithTitle:subject + message:NSLocalizedString(@"Error: no mail account configured", nil) + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", nil) + otherButtonTitles: nil]; + [alert show]; + [alert release]; + } +} + + +- (BOOL)displayDebugPopup:(NSString*)address { + LinphoneManager* mgr = [LinphoneManager instance]; + NSString* debugAddress = [mgr lpConfigStringForKey:@"debug_popup_magic" withDefault:@""]; + if( ![debugAddress isEqualToString:@""] && [address isEqualToString:debugAddress]){ + + + DTAlertView* alertView = [[DTAlertView alloc] initWithTitle:NSLocalizedString(@"Debug", nil) + message:NSLocalizedString(@"Choose an action", nil)]; + + [alertView addCancelButtonWithTitle:NSLocalizedString(@"Cancel", nil) block:nil]; + + [alertView addButtonWithTitle:NSLocalizedString(@"Send logs", nil) block:^{ + NSString* appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; + NSString* logsAddress = [mgr lpConfigStringForKey:@"debug_popup_email" withDefault:@"linphone-ios@linphone.org"]; + [self presentMailViewWithTitle:appName forRecipients:@[logsAddress] attachLogs:true]; + }]; + + BOOL debugEnabled = [[LinphoneManager instance] lpConfigBoolForKey:@"debugenable_preference"]; + NSString* actionLog = (debugEnabled ? NSLocalizedString(@"Disable logs", nil) : NSLocalizedString(@"Enable logs", nil)); + [alertView addButtonWithTitle:actionLog block:^{ + // enable / disable + BOOL enableDebug = ![mgr lpConfigBoolForKey:@"debugenable_preference"]; + [mgr lpConfigSetBool:enableDebug forKey:@"debugenable_preference"]; + [mgr setLogsEnabled:enableDebug]; + }]; + + [alertView show]; + [alertView release]; + return true; + } + return false; +} + + #pragma mark - - (void)callUpdate:(LinphoneCall*)call state:(LinphoneCallState)state { @@ -339,6 +423,13 @@ static UICompositeViewDescription *compositeDescription = nil; return YES; } +#pragma mark - MFComposeMailDelegate + +-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error { + [controller dismissViewControllerAnimated:TRUE completion:^{}]; + [self.navigationController setNavigationBarHidden:TRUE animated:FALSE]; +} + #pragma mark - Action Functions @@ -359,6 +450,9 @@ static UICompositeViewDescription *compositeDescription = nil; } - (IBAction)onAddressChange: (id)sender { + if( [self displayDebugPopup:self.addressField.text] ){ + self.addressField.text = @""; + } if([[addressField text] length] > 0) { [addContactButton setEnabled:TRUE]; [eraseButton setEnabled:TRUE]; diff --git a/Classes/FirstLoginViewController.m b/Classes/FirstLoginViewController.m index abd8a3e2e..cfd5cf754 100644 --- a/Classes/FirstLoginViewController.m +++ b/Classes/FirstLoginViewController.m @@ -190,7 +190,7 @@ static UICompositeViewDescription *compositeDescription = nil; ,linphone_proxy_config_get_domain(proxyCfg)); linphone_core_add_auth_info([LinphoneManager getLc], auth_info); linphone_core_add_proxy_config([LinphoneManager getLc], proxyCfg); - linphone_core_set_default_proxy([LinphoneManager getLc], proxyCfg); + linphone_core_set_default_proxy_config([LinphoneManager getLc], proxyCfg); [self.waitView setHidden:false]; }; } diff --git a/Classes/KIF b/Classes/KIF new file mode 160000 index 000000000..6a21291a3 --- /dev/null +++ b/Classes/KIF @@ -0,0 +1 @@ +Subproject commit 6a21291a3b6653304be63eeaca8a0edfeb01d7c6 diff --git a/Classes/LinphoneAppDelegate.m b/Classes/LinphoneAppDelegate.m index ae4adeb89..950bcb362 100644 --- a/Classes/LinphoneAppDelegate.m +++ b/Classes/LinphoneAppDelegate.m @@ -347,8 +347,8 @@ { [[LinphoneManager instance] acceptCallForCallId:[notification.userInfo objectForKey:@"callId"]]; } - } else if([notification.userInfo objectForKey:@"from"] != nil) { - NSString *remoteContact = (NSString*)[notification.userInfo objectForKey:@"from"]; + } else if([notification.userInfo objectForKey:@"from_addr"] != nil) { + NSString *remoteContact = (NSString*)[notification.userInfo objectForKey:@"from_addr"]; // Go to ChatRoom view [[PhoneMainView instance] changeCurrentView:[ChatViewController compositeViewDescription]]; LinphoneChatRoom*room = [self findChatRoomForContact:remoteContact]; @@ -428,7 +428,7 @@ // use the standard handler [self application:application didReceiveLocalNotification:notification]; } else if( [identifier isEqualToString:@"mark_read"] ){ - NSString* from = [notification.userInfo objectForKey:@"from"]; + NSString* from = [notification.userInfo objectForKey:@"from_addr"]; LinphoneChatRoom* room = linphone_core_get_or_create_chat_room(lc, [from UTF8String]); if( room ){ linphone_chat_room_mark_as_read(room); diff --git a/Classes/LinphoneCoreSettingsStore.m b/Classes/LinphoneCoreSettingsStore.m index 2327a34d0..16c3289ee 100644 --- a/Classes/LinphoneCoreSettingsStore.m +++ b/Classes/LinphoneCoreSettingsStore.m @@ -200,7 +200,8 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args); switch(menc){ case LinphoneMediaEncryptionSRTP: val="SRTP"; break; case LinphoneMediaEncryptionZRTP: val="ZRTP"; break; - default: val="None"; break; + case LinphoneMediaEncryptionDTLS: val="DTLS"; break; + case LinphoneMediaEncryptionNone: val="None"; break; } [self setString:val forKey:@"media_encryption_preference"]; } @@ -438,7 +439,7 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args); } else { // was a new proxy config, add it linphone_core_add_proxy_config(lc, proxyCfg); - linphone_core_set_default_proxy(lc,proxyCfg); + linphone_core_set_default_proxy_config(lc,proxyCfg); } bad_proxy: @@ -573,6 +574,8 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args); linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionSRTP); else if (menc && [menc compare:@"ZRTP"] == NSOrderedSame) linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionZRTP); + else if (menc && [menc compare:@"DTLS"] == NSOrderedSame) + linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionDTLS); else linphone_core_set_media_encryption(lc, LinphoneMediaEncryptionNone); diff --git a/Classes/LinphoneManager.h b/Classes/LinphoneManager.h index 5bd91a667..daa3c4779 100644 --- a/Classes/LinphoneManager.h +++ b/Classes/LinphoneManager.h @@ -157,6 +157,7 @@ typedef struct _LinphoneManagerSounds { + (BOOL)copyFile:(NSString*)src destination:(NSString*)dst override:(BOOL)override; + (NSString*)bundleFile:(NSString*)file; + (NSString*)documentFile:(NSString*)file; ++ (NSString*)cacheDirectory; - (void)acceptCall:(LinphoneCall *)call; - (void)call:(NSString *)address displayName:(NSString*)displayName transfer:(BOOL)transfer; diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index 994127187..2f5606027 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -895,6 +895,7 @@ static void linphone_iphone_registration_state(LinphoneCore *lc, LinphoneProxyCo const LinphoneAddress* remoteAddress = linphone_chat_message_get_from_address(msg); char* c_address = linphone_address_as_string_uri_only(remoteAddress); NSString* address = [NSString stringWithUTF8String:c_address]; + NSString* remote_uri = [NSString stringWithUTF8String:c_address]; const char* call_id = linphone_chat_message_get_custom_header(msg, "Call-ID"); NSString* callID = [NSString stringWithUTF8String:call_id]; @@ -926,7 +927,7 @@ static void linphone_iphone_registration_state(LinphoneCore *lc, LinphoneProxyCo notif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"IM_MSG",nil), address]; notif.alertAction = NSLocalizedString(@"Show", nil); notif.soundName = @"msg.caf"; - notif.userInfo = @{@"from":address, @"call-id":callID}; + notif.userInfo = @{@"from":address, @"from_addr":remote_uri, @"call-id":callID}; [[UIApplication sharedApplication] presentLocalNotificationNow:notif]; } @@ -1458,14 +1459,8 @@ static BOOL libStarted = FALSE; libmsbcg729_init(); // load g729 plugin #endif - /*to make sure we don't loose debug trace*/ - if ([self lpConfigBoolForKey:@"debugenable_preference"]) { - linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler); - ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); - /*must be done before creating linphone core to get its traces too*/ - } linphone_core_set_log_collection_path([[LinphoneManager cacheDirectory] UTF8String]); - linphone_core_enable_log_collection([self lpConfigBoolForKey:@"debugenable_preference"]); + [self setLogsEnabled:[self lpConfigBoolForKey:@"debugenable_preference"]]; theLinphoneCore = linphone_core_new_with_config (&linphonec_vtable @@ -1477,7 +1472,8 @@ static BOOL libStarted = FALSE; /* set the CA file no matter what, since the remote provisioning could be hitting an HTTPS server */ const char* lRootCa = [[LinphoneManager bundleFile:@"rootca.pem"] cStringUsingEncoding:[NSString defaultCStringEncoding]]; linphone_core_set_root_ca(theLinphoneCore, lRootCa); - + linphone_core_set_user_certificates_path(theLinphoneCore,[[LinphoneManager cacheDirectory] UTF8String]); + /* The core will call the linphone_iphone_configuring_status_changed callback when the remote provisioning is loaded (or skipped). Wait for this to finish the code configuration */ @@ -2078,10 +2074,12 @@ static void audioRouteChangeListenerCallback ( -(void)setLogsEnabled:(BOOL)enabled { if (enabled) { + NSLog(@"Enabling debug logs"); linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler); ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); linphone_core_enable_log_collection(enabled); } else { + NSLog(@"Disabling debug logs"); linphone_core_enable_log_collection(enabled); linphone_core_disable_logs(); } diff --git a/Classes/LinphoneUI/Base.lproj/UICallCell.strings b/Classes/LinphoneUI/Base.lproj/UICallCell.strings index 92138347c..9d9551217 100644 Binary files a/Classes/LinphoneUI/Base.lproj/UICallCell.strings and b/Classes/LinphoneUI/Base.lproj/UICallCell.strings differ diff --git a/Classes/LinphoneUI/Base.lproj/UIChatRoomCell.strings b/Classes/LinphoneUI/Base.lproj/UIChatRoomCell.strings index 9ca9f1ae8..91f270f45 100644 Binary files a/Classes/LinphoneUI/Base.lproj/UIChatRoomCell.strings and b/Classes/LinphoneUI/Base.lproj/UIChatRoomCell.strings differ diff --git a/Classes/LinphoneUI/Base.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/Base.lproj/UIContactDetailsHeader.strings index 9da4ee791..55ec8b262 100644 Binary files a/Classes/LinphoneUI/Base.lproj/UIContactDetailsHeader.strings and b/Classes/LinphoneUI/Base.lproj/UIContactDetailsHeader.strings differ diff --git a/Classes/LinphoneUI/UIContactCell.m b/Classes/LinphoneUI/UIContactCell.m index 06c28d2bf..5f3c595de 100644 --- a/Classes/LinphoneUI/UIContactCell.m +++ b/Classes/LinphoneUI/UIContactCell.m @@ -70,7 +70,7 @@ [self setHighlighted:false animated:true]; } -- (NSString *)accessibilityValue { +- (NSString *)accessibilityLabel { return [NSString stringWithFormat:@"%@ %@", firstNameLabel.text, lastNameLabel.text]; } diff --git a/Classes/LinphoneUI/UIContactDetailsHeader.m b/Classes/LinphoneUI/UIContactDetailsHeader.m index f3787a4f8..376006b15 100644 --- a/Classes/LinphoneUI/UIContactDetailsHeader.m +++ b/Classes/LinphoneUI/UIContactDetailsHeader.m @@ -94,6 +94,7 @@ [normalView setAlpha:1.0f]; [editView setAlpha:0.0f]; [tableView setEditing:TRUE animated:false]; + tableView.accessibilityIdentifier = @"Contact Name Table"; } diff --git a/Classes/LinphoneUI/ar.lproj/UICallCell.strings b/Classes/LinphoneUI/ar.lproj/UICallCell.strings index 1ddefac3e..5867d40e5 100644 Binary files a/Classes/LinphoneUI/ar.lproj/UICallCell.strings and b/Classes/LinphoneUI/ar.lproj/UICallCell.strings differ diff --git a/Classes/LinphoneUI/ar.lproj/UIChatRoomCell.strings b/Classes/LinphoneUI/ar.lproj/UIChatRoomCell.strings index 268a5488f..77b8494d0 100644 Binary files a/Classes/LinphoneUI/ar.lproj/UIChatRoomCell.strings and b/Classes/LinphoneUI/ar.lproj/UIChatRoomCell.strings differ diff --git a/Classes/LinphoneUI/ar.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/ar.lproj/UIContactDetailsHeader.strings index 17004dd72..bd8aa1e2b 100644 Binary files a/Classes/LinphoneUI/ar.lproj/UIContactDetailsHeader.strings and b/Classes/LinphoneUI/ar.lproj/UIContactDetailsHeader.strings differ diff --git a/Classes/LinphoneUI/de.lproj/UICallCell.strings b/Classes/LinphoneUI/de.lproj/UICallCell.strings index 1747f9328..114e59720 100644 Binary files a/Classes/LinphoneUI/de.lproj/UICallCell.strings and b/Classes/LinphoneUI/de.lproj/UICallCell.strings differ diff --git a/Classes/LinphoneUI/de.lproj/UIChatRoomCell.strings b/Classes/LinphoneUI/de.lproj/UIChatRoomCell.strings index e7201be63..9c4254d7b 100644 Binary files a/Classes/LinphoneUI/de.lproj/UIChatRoomCell.strings and b/Classes/LinphoneUI/de.lproj/UIChatRoomCell.strings differ diff --git a/Classes/LinphoneUI/de.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/de.lproj/UIContactDetailsHeader.strings index 790695a1c..2d8554414 100644 Binary files a/Classes/LinphoneUI/de.lproj/UIContactDetailsHeader.strings and b/Classes/LinphoneUI/de.lproj/UIContactDetailsHeader.strings differ diff --git a/Classes/LinphoneUI/fr.lproj/UICallCell.strings b/Classes/LinphoneUI/fr.lproj/UICallCell.strings index dd352ca36..94dbc6b13 100644 Binary files a/Classes/LinphoneUI/fr.lproj/UICallCell.strings and b/Classes/LinphoneUI/fr.lproj/UICallCell.strings differ diff --git a/Classes/LinphoneUI/fr.lproj/UIChatRoomCell.strings b/Classes/LinphoneUI/fr.lproj/UIChatRoomCell.strings index a54d1be29..35daf8f29 100644 Binary files a/Classes/LinphoneUI/fr.lproj/UIChatRoomCell.strings and b/Classes/LinphoneUI/fr.lproj/UIChatRoomCell.strings differ diff --git a/Classes/LinphoneUI/fr.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/fr.lproj/UIContactDetailsHeader.strings index b85ee2376..6c1d42070 100644 Binary files a/Classes/LinphoneUI/fr.lproj/UIContactDetailsHeader.strings and b/Classes/LinphoneUI/fr.lproj/UIContactDetailsHeader.strings differ diff --git a/Classes/LinphoneUI/ja.lproj/UICallCell.strings b/Classes/LinphoneUI/ja.lproj/UICallCell.strings index 70769c2ce..1d9525a61 100644 Binary files a/Classes/LinphoneUI/ja.lproj/UICallCell.strings and b/Classes/LinphoneUI/ja.lproj/UICallCell.strings differ diff --git a/Classes/LinphoneUI/ja.lproj/UIChatRoomCell.strings b/Classes/LinphoneUI/ja.lproj/UIChatRoomCell.strings index bf9c680d6..317551c24 100644 Binary files a/Classes/LinphoneUI/ja.lproj/UIChatRoomCell.strings and b/Classes/LinphoneUI/ja.lproj/UIChatRoomCell.strings differ diff --git a/Classes/LinphoneUI/ja.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/ja.lproj/UIContactDetailsHeader.strings index bd3e929d9..101df1338 100644 Binary files a/Classes/LinphoneUI/ja.lproj/UIContactDetailsHeader.strings and b/Classes/LinphoneUI/ja.lproj/UIContactDetailsHeader.strings differ diff --git a/Classes/LinphoneUI/ru.lproj/UICallCell.strings b/Classes/LinphoneUI/ru.lproj/UICallCell.strings index 6fff0fad0..8dad3a8a4 100644 Binary files a/Classes/LinphoneUI/ru.lproj/UICallCell.strings and b/Classes/LinphoneUI/ru.lproj/UICallCell.strings differ diff --git a/Classes/LinphoneUI/ru.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/ru.lproj/UIContactDetailsHeader.strings index dc67832a3..793dfe07b 100644 Binary files a/Classes/LinphoneUI/ru.lproj/UIContactDetailsHeader.strings and b/Classes/LinphoneUI/ru.lproj/UIContactDetailsHeader.strings differ diff --git a/Classes/LinphoneUI/zh_TW.lproj/UICallBar.strings b/Classes/LinphoneUI/zh_TW.lproj/UICallBar.strings new file mode 100644 index 000000000..4b627577c Binary files /dev/null and b/Classes/LinphoneUI/zh_TW.lproj/UICallBar.strings differ diff --git a/Classes/LinphoneUI/zh_TW.lproj/UICallBar~ipad.strings b/Classes/LinphoneUI/zh_TW.lproj/UICallBar~ipad.strings new file mode 100644 index 000000000..7bda03e1b Binary files /dev/null and b/Classes/LinphoneUI/zh_TW.lproj/UICallBar~ipad.strings differ diff --git a/Classes/LinphoneUI/zh_TW.lproj/UICallCell.strings b/Classes/LinphoneUI/zh_TW.lproj/UICallCell.strings new file mode 100644 index 000000000..7fb608a6d Binary files /dev/null and b/Classes/LinphoneUI/zh_TW.lproj/UICallCell.strings differ diff --git a/Classes/LinphoneUI/zh_TW.lproj/UIChatCell.strings b/Classes/LinphoneUI/zh_TW.lproj/UIChatCell.strings new file mode 100644 index 000000000..c16425967 Binary files /dev/null and b/Classes/LinphoneUI/zh_TW.lproj/UIChatCell.strings differ diff --git a/Classes/LinphoneUI/zh_TW.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/zh_TW.lproj/UIContactDetailsHeader.strings new file mode 100644 index 000000000..20b1a62e9 Binary files /dev/null and b/Classes/LinphoneUI/zh_TW.lproj/UIContactDetailsHeader.strings differ diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index e1a53e5ee..909a8fb39 100644 --- a/Classes/SettingsViewController.m +++ b/Classes/SettingsViewController.m @@ -32,6 +32,8 @@ #import "IASKTextField.h" #include "linphone/lpconfig.h" +#import "DTAlertView.h" + #ifdef DEBUG @interface UIDevice (debug) @@ -562,6 +564,14 @@ static UICompositeViewDescription *compositeDescription = nil; [values removeObject:@"SRTP"]; [dict setObject:values forKey:@"Values"]; } + if(!linphone_core_media_encryption_supported([LinphoneManager getLc], LinphoneMediaEncryptionDTLS)) { + NSMutableArray *titles = [NSMutableArray arrayWithArray:[dict objectForKey:@"Titles"]]; + [titles removeObject:@"DTLS"]; + [dict setObject:titles forKey:@"Titles"]; + NSMutableArray *values = [NSMutableArray arrayWithArray:[dict objectForKey:@"Values"]]; + [values removeObject:@"DTLS"]; + [dict setObject:values forKey:@"Values"]; + } return [[[IASKSpecifier alloc] initWithSpecifier:dict] autorelease]; } @@ -686,6 +696,7 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)settingsViewController:(IASKAppSettingsViewController*)sender buttonTappedForSpecifier:(IASKSpecifier*)specifier { NSString *key = [specifier.specifierDict objectForKey:kIASKKey]; + LinphoneCore* lc = [LinphoneManager getLc]; #ifdef DEBUG if([key isEqual:@"release_button"]) { [UIApplication sharedApplication].keyWindow.rootViewController = nil; @@ -701,9 +712,7 @@ static UICompositeViewDescription *compositeDescription = nil; } #endif if([key isEqual:@"wizard_button"]) { - LinphoneProxyConfig* proxy = NULL; - linphone_core_get_default_proxy([LinphoneManager getLc], &proxy); - if (proxy == NULL ) { + if (linphone_core_get_default_proxy_config(lc) == NULL ) { [self goToWizard]; return; } @@ -714,12 +723,30 @@ static UICompositeViewDescription *compositeDescription = nil; otherButtonTitles:NSLocalizedString(@"Launch Wizard",nil), nil]; [alert show]; [alert release]; - } else if([key isEqual:@"about_button"]) { + } else if ( [key isEqual:@"clear_proxy_button"] ) { + if ( linphone_core_get_default_proxy_config(lc) == NULL ) { + return; + } + + DTAlertView* alert = [[DTAlertView alloc] initWithTitle:NSLocalizedString(@"Warning", nil) message:NSLocalizedString(@"Are you sure to want to clear your proxy setup?",nil)]; + + [alert addCancelButtonWithTitle:NSLocalizedString(@"Cancel", nil) block:nil]; + [alert addButtonWithTitle:NSLocalizedString(@"Yes", nil) + block:^{ + linphone_core_clear_proxy_config(lc); + linphone_core_clear_all_auth_info(lc); + [settingsStore transformLinphoneCoreToKeys]; + [settingsController.tableView reloadData]; + }]; + [alert show]; + [alert release]; + + } else if([key isEqual:@"about_button"]) { [[PhoneMainView instance] changeCurrentView:[AboutViewController compositeViewDescription] push:TRUE]; } else if ([key isEqualToString:@"reset_logs_button"]) { linphone_core_reset_log_collection(); } else if ([key isEqual:@"send_logs_button"]) { - char * filepath = linphone_core_compress_log_collection([LinphoneManager getLc]); + char * filepath = linphone_core_compress_log_collection(lc); if (filepath == NULL) { [LinphoneLogger log:LinphoneLoggerError format:@"Cannot sent logs: file is NULL"]; return; diff --git a/Classes/WizardViewController.m b/Classes/WizardViewController.m index 82cc40592..69110d042 100644 --- a/Classes/WizardViewController.m +++ b/Classes/WizardViewController.m @@ -514,7 +514,7 @@ static UICompositeViewDescription *compositeDescription = nil; linphone_proxy_config_enable_register(proxyCfg, true); linphone_core_add_auth_info([LinphoneManager getLc], info); linphone_core_add_proxy_config([LinphoneManager getLc], proxyCfg); - linphone_core_set_default_proxy([LinphoneManager getLc], proxyCfg); + linphone_core_set_default_proxy_config([LinphoneManager getLc], proxyCfg); } - (NSString*)identityFromUsername:(NSString*)username { diff --git a/Classes/ar.lproj/ChatRoomViewController.strings b/Classes/ar.lproj/ChatRoomViewController.strings index 4aa68bd62..c54b6c10d 100644 Binary files a/Classes/ar.lproj/ChatRoomViewController.strings and b/Classes/ar.lproj/ChatRoomViewController.strings differ diff --git a/Classes/ar.lproj/HistoryDetailsViewController.strings b/Classes/ar.lproj/HistoryDetailsViewController.strings index ef989cd93..1398242f7 100644 Binary files a/Classes/ar.lproj/HistoryDetailsViewController.strings and b/Classes/ar.lproj/HistoryDetailsViewController.strings differ diff --git a/Classes/ar.lproj/IncomingCallViewController.strings b/Classes/ar.lproj/IncomingCallViewController.strings index 07226ba9d..d90c464f6 100644 Binary files a/Classes/ar.lproj/IncomingCallViewController.strings and b/Classes/ar.lproj/IncomingCallViewController.strings differ diff --git a/Classes/ar.lproj/IncomingCallViewController~ipad.strings b/Classes/ar.lproj/IncomingCallViewController~ipad.strings index 755032cab..123065a5d 100644 Binary files a/Classes/ar.lproj/IncomingCallViewController~ipad.strings and b/Classes/ar.lproj/IncomingCallViewController~ipad.strings differ diff --git a/Classes/ar.lproj/WizardViews.strings b/Classes/ar.lproj/WizardViews.strings index 5077a9fc8..743a14dfd 100644 Binary files a/Classes/ar.lproj/WizardViews.strings and b/Classes/ar.lproj/WizardViews.strings differ diff --git a/Classes/de.lproj/ChatRoomViewController.strings b/Classes/de.lproj/ChatRoomViewController.strings index 2756503dc..b116222de 100644 Binary files a/Classes/de.lproj/ChatRoomViewController.strings and b/Classes/de.lproj/ChatRoomViewController.strings differ diff --git a/Classes/de.lproj/HistoryDetailsViewController.strings b/Classes/de.lproj/HistoryDetailsViewController.strings index f47924f05..fe90e3995 100644 Binary files a/Classes/de.lproj/HistoryDetailsViewController.strings and b/Classes/de.lproj/HistoryDetailsViewController.strings differ diff --git a/Classes/de.lproj/IncomingCallViewController.strings b/Classes/de.lproj/IncomingCallViewController.strings index 6c230b92f..6d9f4da81 100644 Binary files a/Classes/de.lproj/IncomingCallViewController.strings and b/Classes/de.lproj/IncomingCallViewController.strings differ diff --git a/Classes/de.lproj/IncomingCallViewController~ipad.strings b/Classes/de.lproj/IncomingCallViewController~ipad.strings index 2af2d6c37..951ad9721 100644 Binary files a/Classes/de.lproj/IncomingCallViewController~ipad.strings and b/Classes/de.lproj/IncomingCallViewController~ipad.strings differ diff --git a/Classes/de.lproj/WizardViews.strings b/Classes/de.lproj/WizardViews.strings index cc90ca31a..4ff99898a 100644 Binary files a/Classes/de.lproj/WizardViews.strings and b/Classes/de.lproj/WizardViews.strings differ diff --git a/Classes/fr.lproj/ChatRoomViewController.strings b/Classes/fr.lproj/ChatRoomViewController.strings index 96b177a8b..852063d13 100644 Binary files a/Classes/fr.lproj/ChatRoomViewController.strings and b/Classes/fr.lproj/ChatRoomViewController.strings differ diff --git a/Classes/fr.lproj/HistoryDetailsViewController.strings b/Classes/fr.lproj/HistoryDetailsViewController.strings index 517667cf5..d1a6c5589 100644 Binary files a/Classes/fr.lproj/HistoryDetailsViewController.strings and b/Classes/fr.lproj/HistoryDetailsViewController.strings differ diff --git a/Classes/fr.lproj/IncomingCallViewController.strings b/Classes/fr.lproj/IncomingCallViewController.strings index 2559620d9..fd68b1fc5 100644 Binary files a/Classes/fr.lproj/IncomingCallViewController.strings and b/Classes/fr.lproj/IncomingCallViewController.strings differ diff --git a/Classes/fr.lproj/IncomingCallViewController~ipad.strings b/Classes/fr.lproj/IncomingCallViewController~ipad.strings index af277919b..bdb7ff117 100644 Binary files a/Classes/fr.lproj/IncomingCallViewController~ipad.strings and b/Classes/fr.lproj/IncomingCallViewController~ipad.strings differ diff --git a/Classes/fr.lproj/WizardViews.strings b/Classes/fr.lproj/WizardViews.strings index 8759e5071..a8665594e 100644 Binary files a/Classes/fr.lproj/WizardViews.strings and b/Classes/fr.lproj/WizardViews.strings differ diff --git a/Classes/ja.lproj/ChatRoomViewController.strings b/Classes/ja.lproj/ChatRoomViewController.strings index 90a808097..221a03340 100644 Binary files a/Classes/ja.lproj/ChatRoomViewController.strings and b/Classes/ja.lproj/ChatRoomViewController.strings differ diff --git a/Classes/ja.lproj/HistoryDetailsViewController.strings b/Classes/ja.lproj/HistoryDetailsViewController.strings index 621b57ddc..f56503b10 100644 Binary files a/Classes/ja.lproj/HistoryDetailsViewController.strings and b/Classes/ja.lproj/HistoryDetailsViewController.strings differ diff --git a/Classes/ja.lproj/IncomingCallViewController.strings b/Classes/ja.lproj/IncomingCallViewController.strings index 3f5f6aeb3..ff9f3ee3c 100644 Binary files a/Classes/ja.lproj/IncomingCallViewController.strings and b/Classes/ja.lproj/IncomingCallViewController.strings differ diff --git a/Classes/ja.lproj/IncomingCallViewController~ipad.strings b/Classes/ja.lproj/IncomingCallViewController~ipad.strings index 882beb05b..0f32ebaae 100644 Binary files a/Classes/ja.lproj/IncomingCallViewController~ipad.strings and b/Classes/ja.lproj/IncomingCallViewController~ipad.strings differ diff --git a/Classes/ja.lproj/WizardViews.strings b/Classes/ja.lproj/WizardViews.strings index a48859525..eb781b5ef 100644 Binary files a/Classes/ja.lproj/WizardViews.strings and b/Classes/ja.lproj/WizardViews.strings differ diff --git a/Classes/ru.lproj/ChatRoomViewController.strings b/Classes/ru.lproj/ChatRoomViewController.strings index 22c828084..48cf472e0 100644 Binary files a/Classes/ru.lproj/ChatRoomViewController.strings and b/Classes/ru.lproj/ChatRoomViewController.strings differ diff --git a/Classes/ru.lproj/HistoryDetailsViewController.strings b/Classes/ru.lproj/HistoryDetailsViewController.strings index 4a8846768..fcd2c47c6 100644 Binary files a/Classes/ru.lproj/HistoryDetailsViewController.strings and b/Classes/ru.lproj/HistoryDetailsViewController.strings differ diff --git a/Classes/ru.lproj/IncomingCallViewController.strings b/Classes/ru.lproj/IncomingCallViewController.strings index 23908fb3e..c13b84710 100644 Binary files a/Classes/ru.lproj/IncomingCallViewController.strings and b/Classes/ru.lproj/IncomingCallViewController.strings differ diff --git a/Classes/ru.lproj/IncomingCallViewController~ipad.strings b/Classes/ru.lproj/IncomingCallViewController~ipad.strings index 879a6f1dd..8aaca9606 100644 Binary files a/Classes/ru.lproj/IncomingCallViewController~ipad.strings and b/Classes/ru.lproj/IncomingCallViewController~ipad.strings differ diff --git a/Classes/ru.lproj/WizardViews.strings b/Classes/ru.lproj/WizardViews.strings index 903b5365b..8d2de1a47 100644 Binary files a/Classes/ru.lproj/WizardViews.strings and b/Classes/ru.lproj/WizardViews.strings differ diff --git a/Classes/zh_TW.lproj/AboutViewController.strings b/Classes/zh_TW.lproj/AboutViewController.strings new file mode 100644 index 000000000..cacfb5460 Binary files /dev/null and b/Classes/zh_TW.lproj/AboutViewController.strings differ diff --git a/Classes/zh_TW.lproj/ChatRoomViewController.strings b/Classes/zh_TW.lproj/ChatRoomViewController.strings new file mode 100644 index 000000000..23f2ad76d Binary files /dev/null and b/Classes/zh_TW.lproj/ChatRoomViewController.strings differ diff --git a/Classes/zh_TW.lproj/ChatViewController.strings b/Classes/zh_TW.lproj/ChatViewController.strings new file mode 100644 index 000000000..9e74e9187 Binary files /dev/null and b/Classes/zh_TW.lproj/ChatViewController.strings differ diff --git a/Classes/zh_TW.lproj/ContactDetailsLabelViewController.strings b/Classes/zh_TW.lproj/ContactDetailsLabelViewController.strings new file mode 100644 index 000000000..cd678ed1e Binary files /dev/null and b/Classes/zh_TW.lproj/ContactDetailsLabelViewController.strings differ diff --git a/Classes/zh_TW.lproj/ContactDetailsViewController.strings b/Classes/zh_TW.lproj/ContactDetailsViewController.strings new file mode 100644 index 000000000..5b94a6f7f Binary files /dev/null and b/Classes/zh_TW.lproj/ContactDetailsViewController.strings differ diff --git a/Classes/zh_TW.lproj/ContactsViewController.strings b/Classes/zh_TW.lproj/ContactsViewController.strings new file mode 100644 index 000000000..633b2eb51 Binary files /dev/null and b/Classes/zh_TW.lproj/ContactsViewController.strings differ diff --git a/Classes/zh_TW.lproj/DialerViewController.strings b/Classes/zh_TW.lproj/DialerViewController.strings new file mode 100644 index 000000000..6af0b616c Binary files /dev/null and b/Classes/zh_TW.lproj/DialerViewController.strings differ diff --git a/Classes/zh_TW.lproj/DialerViewController~ipad.strings b/Classes/zh_TW.lproj/DialerViewController~ipad.strings new file mode 100644 index 000000000..f47328c1d Binary files /dev/null and b/Classes/zh_TW.lproj/DialerViewController~ipad.strings differ diff --git a/Classes/zh_TW.lproj/HistoryDetailsViewController.strings b/Classes/zh_TW.lproj/HistoryDetailsViewController.strings new file mode 100644 index 000000000..d29ff8f24 Binary files /dev/null and b/Classes/zh_TW.lproj/HistoryDetailsViewController.strings differ diff --git a/Classes/zh_TW.lproj/HistoryViewController.strings b/Classes/zh_TW.lproj/HistoryViewController.strings new file mode 100644 index 000000000..0367a06c1 Binary files /dev/null and b/Classes/zh_TW.lproj/HistoryViewController.strings differ diff --git a/Classes/zh_TW.lproj/ImageViewController.strings b/Classes/zh_TW.lproj/ImageViewController.strings new file mode 100644 index 000000000..907b630ae Binary files /dev/null and b/Classes/zh_TW.lproj/ImageViewController.strings differ diff --git a/Classes/zh_TW.lproj/IncomingCallViewController.strings b/Classes/zh_TW.lproj/IncomingCallViewController.strings new file mode 100644 index 000000000..4771c71db Binary files /dev/null and b/Classes/zh_TW.lproj/IncomingCallViewController.strings differ diff --git a/Classes/zh_TW.lproj/IncomingCallViewController~ipad.strings b/Classes/zh_TW.lproj/IncomingCallViewController~ipad.strings new file mode 100644 index 000000000..af166daa8 Binary files /dev/null and b/Classes/zh_TW.lproj/IncomingCallViewController~ipad.strings differ diff --git a/Classes/zh_TW.lproj/WizardViewController.strings b/Classes/zh_TW.lproj/WizardViewController.strings new file mode 100644 index 000000000..c7cebc6d0 Binary files /dev/null and b/Classes/zh_TW.lproj/WizardViewController.strings differ diff --git a/Classes/zh_TW.lproj/WizardViewController~ipad.strings b/Classes/zh_TW.lproj/WizardViewController~ipad.strings new file mode 100644 index 000000000..9e0f0eb25 Binary files /dev/null and b/Classes/zh_TW.lproj/WizardViewController~ipad.strings differ diff --git a/KifTests/ChatTester.m b/KifTests/ChatTester.m index 66e200519..063717987 100644 --- a/KifTests/ChatTester.m +++ b/KifTests/ChatTester.m @@ -7,6 +7,7 @@ // #import "ChatTester.h" +#include "LinphoneManager.h" @implementation ChatTester @@ -17,23 +18,23 @@ [super beforeAll]; [self switchToValidAccountIfNeeded]; - [tester tapViewWithAccessibilityLabel:@"Chat"]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Chat")]; } #pragma mark - tools - (void)goBackFromChat { - [tester tapViewWithAccessibilityLabel:@"Back"]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Back")]; } - (void)startChatWith:(NSString*)user { - [tester enterText:user intoViewWithAccessibilityLabel:@"Enter a address"]; - [tester tapViewWithAccessibilityLabel:@"New Discussion"]; + [tester enterText:user intoViewWithAccessibilityLabel:LOCALIZED(@"Enter a address")]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"New Discussion")]; } - (void)sendMessage:(NSString*)message { - [tester enterText:message intoViewWithAccessibilityLabel:@"Message field"]; - [tester tapViewWithAccessibilityLabel:@"Send"]; + [tester enterText:message intoViewWithAccessibilityLabel:LOCALIZED(@"Message field")]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Send")]; } @@ -44,10 +45,10 @@ [self sendMessage:@"Hello"]; - [tester waitForViewWithAccessibilityLabel:@"Outgoing message" value:@"Hello" traits:UIAccessibilityTraitStaticText]; - [tester waitForViewWithAccessibilityLabel:@"Incoming message" value:@"Hello" traits:UIAccessibilityTraitStaticText]; + [tester waitForViewWithAccessibilityLabel:LOCALIZED(@"Outgoing message") value:@"Hello" traits:UIAccessibilityTraitStaticText]; + [tester waitForViewWithAccessibilityLabel:LOCALIZED(@"Incoming message") value:@"Hello" traits:UIAccessibilityTraitStaticText]; - [tester waitForViewWithAccessibilityLabel:@"Message status" value:@"delivered" traits:UIAccessibilityTraitImage]; + [tester waitForViewWithAccessibilityLabel:LOCALIZED(@"Message status") value:@"delivered" traits:UIAccessibilityTraitImage]; [self goBackFromChat]; } @@ -56,8 +57,8 @@ [self startChatWith:@"sip://toto"]; - [tester waitForViewWithAccessibilityLabel:@"Invalid address" traits:UIAccessibilityTraitStaticText]; - [tester tapViewWithAccessibilityLabel:@"Cancel"]; + [tester waitForViewWithAccessibilityLabel:LOCALIZED(@"Invalid address") traits:UIAccessibilityTraitStaticText]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Cancel")]; } -(void)testSendToSIPAddress{ @@ -65,7 +66,7 @@ [self startChatWith:sipAddr]; - [tester waitForViewWithAccessibilityLabel:@"Contact name" value:@"testios" traits:0]; + [tester waitForViewWithAccessibilityLabel:LOCALIZED(@"Contact name") value:@"testios" traits:0]; [self goBackFromChat]; } @@ -98,5 +99,44 @@ [self goBackFromChat]; } +- (void)testRemoveAllChats { + NSArray* uuids = [self getUUIDArrayOfSize:5]; + + for( NSString* uuid in uuids ){ + [self startChatWith:uuid]; + [self sendMessage:@"Test"]; + [self goBackFromChat]; + } + + [tester tapViewWithAccessibilityLabel:@"Edit" traits:UIAccessibilityTraitButton]; + + // we expect to be able to delete at least the amount of chatrooms we created + for( int i =0; i< uuids.count; i++){ + [tester tapViewWithAccessibilityLabel:@"Delete" traits:UIAccessibilityTraitButton]; + } + + // then we try to delete all the rest of chatrooms + while ( [tester tryFindingTappableViewWithAccessibilityLabel:@"Delete" traits:UIAccessibilityTraitButton error:nil] ) + { + [tester tapViewWithAccessibilityLabel:@"Delete" traits:UIAccessibilityTraitButton]; + NSLog(@"Deleting an extra chat"); + } + + [tester tapViewWithAccessibilityLabel:@"Edit" traits:UIAccessibilityTraitButton]; // same as the first but it is "OK" on screen + + // check that the tableview is empty + UITableView* tv = nil; + NSError* err = nil; + if( [tester tryFindingAccessibilityElement:nil view:&tv withIdentifier:@"ChatRoom list" tappable:false error:&err] ){ + XCTAssert(tv != nil); + XCTAssert([tv numberOfRowsInSection:0] == 0); // no more chat rooms + } else { + NSLog(@"Error: %@",err); + } + + // test that there's no more chatrooms in the core + XCTAssert(linphone_core_get_chat_rooms([LinphoneManager getLc]) == nil); +} + @end diff --git a/KifTests/ContactsTester.h b/KifTests/ContactsTester.h new file mode 100644 index 000000000..7c8e2f052 --- /dev/null +++ b/KifTests/ContactsTester.h @@ -0,0 +1,13 @@ +// +// ContactsTester.h +// linphone +// +// Created by Guillaume BIENKOWSKI on 17/02/2015. +// +// + +#import "LinphoneTestCase.h" + +@interface ContactsTester : LinphoneTestCase + +@end diff --git a/KifTests/ContactsTester.m b/KifTests/ContactsTester.m new file mode 100644 index 000000000..5adc49d6c --- /dev/null +++ b/KifTests/ContactsTester.m @@ -0,0 +1,132 @@ +// +// ContactsTester.m +// linphone +// +// Created by Guillaume BIENKOWSKI on 17/02/2015. +// +// + +#import "ContactsTester.h" + +#import "ContactDetailsTableViewController.h" + +@implementation ContactsTester + +#pragma mark - Setup + +- (void)beforeAll { + [tester tapViewWithAccessibilityLabel:@"Contacts"]; +} + +#pragma mark - Utils + +- (void)setText:(NSString*)text forContactHeaderIndex:(NSInteger)idx { + [tester tapRowAtIndexPath:[NSIndexPath indexPathForRow:idx inSection:0] inTableViewWithAccessibilityIdentifier:@"Contact Name Table"]; + [tester enterTextIntoCurrentFirstResponder:text]; +} + +- (void)setText:(NSString*)text forContactNumbersIndex:(NSInteger)idx inSection:(NSInteger)section { + [tester tapRowAtIndexPath:[NSIndexPath indexPathForRow:idx inSection:section] inTableViewWithAccessibilityIdentifier:@"Contact numbers table"]; + [tester enterTextIntoCurrentFirstResponder:text]; +} + +- (void)createContact:(NSString*)firstName lastName:(NSString*)lastName phoneNumber:(NSString*)phone SIPAddress:(NSString*)sip { + + XCTAssert(firstName != nil); + [tester tapViewWithAccessibilityLabel:@"Add contact"]; + + // check that the OK button is disabled + [tester waitForViewWithAccessibilityLabel:@"Edit" traits:UIAccessibilityTraitButton|UIAccessibilityTraitNotEnabled|UIAccessibilityTraitSelected]; + + [self setText:firstName forContactHeaderIndex:0]; + + // entering text should enable the "edit" button + [tester waitForViewWithAccessibilityLabel:@"Edit" traits:UIAccessibilityTraitButton|UIAccessibilityTraitSelected]; + + if( lastName ) + [self setText:lastName forContactHeaderIndex:1]; + + if ( phone ){ + [self setText:phone forContactNumbersIndex:0 inSection:ContactSections_Number]; + } + + if ( sip ){ + [self setText:sip forContactNumbersIndex:0 inSection:ContactSections_Sip]; + } + + [tester tapViewWithAccessibilityLabel:@"Edit"]; + [tester tapViewWithAccessibilityLabel:@"Back"]; + +} + +#pragma mark - Tests + +- (void)testDeleteContact { + NSString* contactName = [self getUUID]; + [self createContact:contactName lastName:@"dummy" phoneNumber:@"0102030405" SIPAddress:@"testios"]; + + NSString* fullName = [contactName stringByAppendingString:@" dummy"]; + + [tester tapViewWithAccessibilityLabel:fullName traits:UIAccessibilityTraitStaticText]; + + [tester tapViewWithAccessibilityLabel:@"Edit"]; + [tester scrollViewWithAccessibilityIdentifier:@"Contact numbers table" byFractionOfSizeHorizontal:0 vertical:-0.9]; + + [tester tapViewWithAccessibilityLabel:@"Remove"]; + + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Firstname, Lastname" value:fullName traits:UIAccessibilityTraitStaticText]; +} + +- (void)addNumbersToSection:(NSInteger)section numbers:(NSArray*)numbers { + + [tester tapViewWithAccessibilityLabel:@"Edit"]; + for(NSInteger i = 0; i +#define LOCALIZED(X) (X) + @interface LinphoneTestCase : KIFTestCase @property BOOL invalidAccountSet; @@ -16,5 +18,6 @@ - (NSString*)accountDomain; - (NSString*)getUUID; +- (NSArray*)getUUIDArrayOfSize:(size_t)size; @end diff --git a/KifTests/LinphoneTestCase.m b/KifTests/LinphoneTestCase.m index b0aa88ab9..38b44a836 100644 --- a/KifTests/LinphoneTestCase.m +++ b/KifTests/LinphoneTestCase.m @@ -10,14 +10,14 @@ #import "LinphoneManager.h" -#import +#import "KIF/KIFTypist.h" @implementation LinphoneTestCase + (void)initialize { // default is 0.01, which sometimes confuses the simulator to the point that // it will miss some keys - [KIFTypist setKeystrokeDelay:0.1]; + [KIFTypist setKeystrokeDelay:0.05]; } - (NSString *)accountUsername { @@ -29,7 +29,15 @@ } - (NSString*)getUUID { - return [[NSUUID UUID] UUIDString]; + return [[[NSUUID UUID] UUIDString] substringToIndex:8]; +} + +- (NSArray *)getUUIDArrayOfSize:(size_t)size { + NSMutableArray* array = [NSMutableArray arrayWithCapacity:size]; + for (NSInteger i=0; i true do - pod 'KIF', '~> 3.0' -end - diff --git a/README.md b/README.md index c4b2f6384..e21aa1a96 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,29 @@ # Linphone on iPhone -[![Build Status](https://travis-ci.org/Gui13/linphone-iphone.svg?branch=kif)](https://travis-ci.org/Gui13/linphone-iphone) +[![Build Status](https://travis-ci.org/BelledonneCommunications/linphone-iphone.svg?branch=master)](https://travis-ci.org/BelledonneCommunications/linphone-iphone) ## Build prerequisite -Linphone for iPhone depends on liblinphone SDK. This SDK is generated from makefiles and shell scripts. Before building Linphone on iPhone, please read and execute [liblinphone README](submodule/linphone/README.macos.md). +Linphone for iPhone depends on liblinphone SDK. This SDK is generated from makefiles and shell scripts. -You will NOT be able to build the SDK if you did not read liblinphone README first! +* Xcode (download from apple or using appstore application) +* [Java SE](http://www.oracle.com/technetwork/java/javase/downloads/index.html) or openJDK + This is required to generate a C sourcefile from SIP grammar using [antlr3](http://www.antlr3.org/) generator. +* [HomeBrew](http://brew.sh) or [Macports](http://www.macports.org/). -### Additional dependencies + +### Install dependencies * Using HomeBrew: - brew install imagemagick yasm nasm + brew install autoconf automake pkg-config doxygen java nasm gettext wget yasm optipng imagemagick coreutils intltool + # antlr3.2 is faster than default homebrew version 3.4 - you can install official antlr3 though + brew tap Gui13/linphone + brew install antlr3.2 * Using MacPorts: - sudo port install ImageMagick optipng yasm nasm + sudo port install autoconf automake pkg-config doxygen antlr3 java nasm gettext wget yasm optipng ImageMagick coreutils intltool ### System linking @@ -30,13 +37,13 @@ You will NOT be able to build the SDK if you did not read liblinphone README fir export PATH=$LOCAL_BIN_DIR:$PATH -* Install [gas-preprosessor.pl](http://github.com/yuvi/gas-preprocessor/) (version above July 2013) into your `LOCAL_BIN_DIR` directory +* Install [gas-preprocessor.pl](http://github.com/yuvi/gas-preprocessor/) (version above July 2013) into your PATH. Suppose you use `LOCAL_BIN_DIR` directory: wget --no-check-certificate https://raw.github.com/yuvi/gas-preprocessor/master/gas-preprocessor.pl chmod +x gas-preprocessor.pl sudo mv gas-preprocessor.pl $LOCAL_BIN_DIR -* Link `libtoolize` to `glibtoolize` +* (HomeBrew only) Link `libtoolize` to `glibtoolize` sudo ln -s $LOCAL_BIN_DIR/glibtoolize $LOCAL_BIN_DIR/libtoolize @@ -91,21 +98,9 @@ After the SDK is built, just open the Linphone Xcode project with Xcode, and pre ## TESTING THE APPLICATION -You need the cocoapods gem installed: +We are using the KIF framework to test the UI of Linphone. It is used as a submodule (instead of CocoaPods) for ease. - sudo gem install cocoapods - pod setup # the first time that cocoapods is installed, not needed if you have it already - pod init - -This will install the KIF framework, which is used for testing: - - pod install - -After this, you should open the xcworkspace instead of the xcodeproj - - open linphone.xcworkspace - -Now, simply press `Command + U` and the default simulator will launch and try to pass all the tests. +Simply press `Command + U` and the default simulator / device will launch and try to pass all the tests. ## LIMITATIONS, KNOWN BUGS diff --git a/Resources/ar.lproj/Localizable.strings b/Resources/ar.lproj/Localizable.strings index 8b34acaac..4f874d8c2 100644 Binary files a/Resources/ar.lproj/Localizable.strings and b/Resources/ar.lproj/Localizable.strings differ diff --git a/Resources/de.lproj/Localizable.strings b/Resources/de.lproj/Localizable.strings index cb4167fd8..1259548b0 100644 Binary files a/Resources/de.lproj/Localizable.strings and b/Resources/de.lproj/Localizable.strings differ diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 22f46c686..81e470851 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -43,6 +43,9 @@ /* No comment provided by engineer. */ "Answer" = "Answer"; +/* No comment provided by engineer. */ +"Are you sure to want to clear your proxy setup?" = "Are you sure to want to clear your proxy setup?"; + /* No comment provided by engineer. */ "Average" = "Average"; @@ -250,6 +253,9 @@ /* No comment provided by engineer. */ "No codec" = "No codec"; +/* No comment provided by engineer. */ +"No connectivity" = "No connectivity"; + /* No comment provided by engineer. */ "No microphone" = "No microphone"; @@ -283,6 +289,9 @@ /* No comment provided by engineer. */ "Please enter a valid domain.\n" = "Please enter a valid domain.\n"; +/* No comment provided by engineer. */ +"Please enter a valid username" = "Please enter a valid username"; + /* No comment provided by engineer. */ "Please enter a valid username.\n" = "Please enter a valid username.\n"; @@ -346,6 +355,9 @@ /* No comment provided by engineer. */ "SIP addresses" = "SIP addresses"; +/* No comment provided by engineer. */ +"Stay here" = "Stay here"; + /* No comment provided by engineer. */ "Stop video" = "Stop video"; @@ -397,6 +409,9 @@ /* No comment provided by engineer. */ "Yes" = "Yes"; +/* No comment provided by engineer. */ +"You can either skip verification or connect to the Internet first." = "You can either skip verification or connect to the Internet first."; + /* No comment provided by engineer. */ "You missed a call from %@" = "You missed a call from %@"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index b38bdeda6..5b7ba9cfe 100644 Binary files a/Resources/fr.lproj/Localizable.strings and b/Resources/fr.lproj/Localizable.strings differ diff --git a/Resources/ja.lproj/Localizable.strings b/Resources/ja.lproj/Localizable.strings index 18c87b3db..e8274a38f 100644 Binary files a/Resources/ja.lproj/Localizable.strings and b/Resources/ja.lproj/Localizable.strings differ diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index ed548e5fd..0a9e737e4 100644 Binary files a/Resources/ru.lproj/Localizable.strings and b/Resources/ru.lproj/Localizable.strings differ diff --git a/Resources/zh_TW.lproj/Localizable.strings b/Resources/zh_TW.lproj/Localizable.strings new file mode 100644 index 000000000..f51670b73 Binary files /dev/null and b/Resources/zh_TW.lproj/Localizable.strings differ diff --git a/Settings/InAppSettings.bundle/Network.plist b/Settings/InAppSettings.bundle/Network.plist index 890678ce1..4eb893d65 100644 --- a/Settings/InAppSettings.bundle/Network.plist +++ b/Settings/InAppSettings.bundle/Network.plist @@ -124,6 +124,7 @@ None SRTP ZRTP + DTLS Type PSMultiValueSpecifier @@ -132,6 +133,7 @@ None SRTP ZRTP + DTLS diff --git a/Settings/InAppSettings.bundle/Root.plist b/Settings/InAppSettings.bundle/Root.plist index 18622f716..62dbcc5ec 100644 --- a/Settings/InAppSettings.bundle/Root.plist +++ b/Settings/InAppSettings.bundle/Root.plist @@ -18,6 +18,14 @@ Type IASKButtonSpecifier + + Key + clear_proxy_button + Title + Clear Account + Type + IASKButtonSpecifier + AutocapitalizationType None diff --git a/Settings/InAppSettings.bundle/ar.lproj/Root.strings b/Settings/InAppSettings.bundle/ar.lproj/Root.strings index 9521d0a78..030f39138 100644 --- a/Settings/InAppSettings.bundle/ar.lproj/Root.strings +++ b/Settings/InAppSettings.bundle/ar.lproj/Root.strings @@ -60,3 +60,6 @@ /* More options */ "More options" = "الخيارات الأخرى"; + +/* Clear Account */ +"Clear Account" = "Clear Account"; \ No newline at end of file diff --git a/Settings/InAppSettings.bundle/en.lproj/Root.strings b/Settings/InAppSettings.bundle/en.lproj/Root.strings index 694ab7da8..442bf4709 100644 --- a/Settings/InAppSettings.bundle/en.lproj/Root.strings +++ b/Settings/InAppSettings.bundle/en.lproj/Root.strings @@ -60,3 +60,6 @@ /* More options */ "More options" = "More options"; + +/* Clear Account */ +"Clear Account" = "Clear Account"; \ No newline at end of file diff --git a/Settings/InAppSettings.bundle/fr.lproj/Root.strings b/Settings/InAppSettings.bundle/fr.lproj/Root.strings index b8e38a79c..46244e4a1 100644 --- a/Settings/InAppSettings.bundle/fr.lproj/Root.strings +++ b/Settings/InAppSettings.bundle/fr.lproj/Root.strings @@ -60,3 +60,6 @@ /* More options */ "More options" = "Plus d'options"; + +/* Clear Account */ +"Clear Account" = "Effacer le compte"; \ No newline at end of file diff --git a/Settings/InAppSettings.bundle/ru.lproj/Root.strings b/Settings/InAppSettings.bundle/ru.lproj/Root.strings index d728e8bac..58b135b33 100644 --- a/Settings/InAppSettings.bundle/ru.lproj/Root.strings +++ b/Settings/InAppSettings.bundle/ru.lproj/Root.strings @@ -60,3 +60,6 @@ /* More options */ "More options" = "Дополнительный счет"; + +/* Clear Account */ +"Clear Account" = "Clear Account"; \ No newline at end of file diff --git a/Tools/check_tools.sh b/Tools/check_tools.sh new file mode 100755 index 000000000..66bd67a2a --- /dev/null +++ b/Tools/check_tools.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +error_on_quit=0 + +echo_err() { + echo "$@" >&2 + error_on_quit=1 +} + +check_installed() { + if [ -z "$(which $1)" ]; then + echo_err "Could not find $1. Please install $2." + return 1 + fi + return 0 +} + +cd $(dirname $0)/.. + +#autoconf pkg-config java ant yasm nasm wget +for prog in autoconf automake pkg-config doxygen java nasm gettext wget yasm optipng; do + check_installed "$prog" "it" +done + +check_installed "ginstall" "coreutils" +check_installed "intltoolize" "intltool" +check_installed "convert" "imagemagick" + +if ! check_installed "libtoolize" "libtool"; then + if [ ! -z "$(which glibtoolize)" ]; then + echo_err "Note: it seems that you are using HomeBrew. Please do a symbolic link from " \ + "glibtoolize to libtoolize: 'ln -s $(which glibtoolize) /usr/local/bin/libtoolize'" + fi +fi + +# needed by x264 +check_installed "gas-preprocessor.pl" "it following the README.md" + +if nasm -f elf32 2>&1 | grep -q "fatal: unrecognised output format"; then + echo_err "Invalid version of nasm: your version does not support elf32 output format. If you have installed nasm, please check that your PATH env variable is set correctly." +fi + +if ! (find submodules/linphone/mediastreamer2 -mindepth 1 2>/dev/null | grep -q . \ + || find submodules/linphone/oRTP -mindepth 1 2>/dev/null | grep -q .); then + echo_err "Missing some git submodules. Did you run 'git submodule update --init --recursive'?" +fi + +if ! xcrun --sdk iphoneos --show-sdk-path &>/dev/null; then + echo_err "iOS SDK not found, please install Xcode from AppStore or equivalent" +elif [ ! -f $(xcrun --sdk iphonesimulator --show-sdk-platform-path)/Developer/usr/bin/strings ]; then + echo_err "strings binary missing, please run 'sudo ln -s $(which strings) $(xcrun --sdk iphonesimulator --show-sdk-platform-path)/Developer/usr/bin/strings'" +fi + +if [ $error_on_quit != 0 ]; then + echo "Failed to detect required tools, aborting. Please run 'make very-clean' before rerunning 'make'" +fi + +exit $error_on_quit diff --git a/Tools/generate_strings_files.sh b/Tools/generate_strings_files.sh index f0d0f5ab6..9619883c6 100755 --- a/Tools/generate_strings_files.sh +++ b/Tools/generate_strings_files.sh @@ -2,6 +2,8 @@ root_directory=$(cd "$(dirname $0)" && pwd)/../ +set -e + # The 2 only specific cases of the application: since we are length limited for push # notifications, the ID is not matching the English translation... so we must keep # the translations! @@ -17,31 +19,32 @@ sed -i.bak "s/= \"IM_MSG\";/= \"$IM_MSG_EN\";/" $localizable_en rm $localizable_en.bak to_utf8=$(mktemp -t linphone) -for xibfile in $(find $(find $root_directory/Classes -name Base.lproj) -name '*.xib'); do - stringsfile=${xibfile/.xib/.strings} - ibtool --generate-strings-file $stringsfile $xibfile +find $root_directory/Classes -not -path "$root_directory/Classes/KIF/*" -name Base.lproj -exec find {} -name '*.xib' \; | while read -r xibfile; do + stringsfile="${xibfile/.xib/.strings}" - # remove if empty - iconv -f utf-16 -t utf-8 $stringsfile > $to_utf8 - if [ ! -s $to_utf8 ]; then - echo "$(basename $stringsfile) is empty, removing" - rm $stringsfile - else - echo "$(basename $xibfile)->$(basename $stringsfile)" + ibtool --generate-strings-file "$stringsfile" "$xibfile" - res_name=$(basename $stringsfile | tr -d '_.~-' | tr '[:upper:]' '[:lower:]') - dir_name=$(echo $(dirname $stringsfile) | sed -E "s|$root_directory/||") + # remove if empty + iconv -f utf-16 -t utf-8 "$stringsfile" > "$to_utf8" + if [ ! -s "$to_utf8" ]; then + echo "$(basename "$stringsfile") is empty, removing" + rm "$stringsfile" + else + echo "$(basename "$xibfile")->$(basename "$stringsfile")" + + res_name=$(basename "$stringsfile" | tr -d '_.~-' | tr '[:upper:]' '[:lower:]') + dir_name=$(echo $(dirname "$stringsfile") | sed -E "s|$root_directory/||") # if not registered in transifex config file, register it if ! grep -q $res_name $root_directory/.tx/config; then echo "not found in .tx/config, adding it" echo " [linphone-ios.$res_name] -file_filter = $(echo $dir_name| sed 's/Base.lproj/.lproj/')/$(basename $stringsfile) -source_file = $dir_name/$(basename $stringsfile) +file_filter = $(echo $dir_name| sed 's/Base.lproj/.lproj/')/$(basename "$stringsfile") +source_file = $dir_name/$(basename "$stringsfile") source_lang = en " >> $root_directory/.tx/config fi - fi + fi done rm $to_utf8 diff --git a/Tools/update_localization.sh b/Tools/update_localization.sh deleted file mode 100755 index fffb57f3d..000000000 --- a/Tools/update_localization.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -root_directory=$(cd "$(dirname $0)" && pwd)/../ - -rm $root_directory/Resources/en.lproj/Localizable.strings -find $root_directory/Classes -name '*.m' | xargs genstrings -u -a -o $root_directory/Resources/en.lproj/ - -to_utf8=$(mktemp -t linphone) -for xibfile in $(find $(find $root_directory/Classes -name Base.lproj) -name '*.xib'); do - stringsfile=${xibfile/.xib/.strings} - - ibtool --generate-strings-file $stringsfile $xibfile - - # remove if empty - iconv -f utf-16 -t utf-8 $stringsfile > $to_utf8 - if [ ! -s $to_utf8 ]; then - echo "$(basename $stringsfile) is empty, removing" - rm $stringsfile - else - echo "$(basename $xibfile)->$(basename $stringsfile)" - - res_name=$(basename $stringsfile | tr -d '_.~-' | tr '[:upper:]' '[:lower:]') - dir_name=$(echo $(dirname $stringsfile) | sed -E "s|$root_directory/||") - # if not registered in transifex config file, register it - if ! grep -q $res_name $root_directory/.tx/config; then - echo "not found in .tx/config, adding it" - echo " -[linphone-ios.$res_name] -file_filter = $(echo $dir_name| sed 's/Base.lproj/.lproj/')/$(basename $stringsfile) -source_file = $dir_name/$(basename $stringsfile) -source_lang = en -" >> $root_directory/.tx/config - fi - fi -done -rm $to_utf8 diff --git a/disable-security.patch b/disable-security.patch deleted file mode 100644 index 98f46d90a..000000000 --- a/disable-security.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/Settings.bundle/Root.plist b/Settings.bundle/Root.plist -index 5bc0378..9d011f1 100644 ---- a/Settings.bundle/Root.plist -+++ b/Settings.bundle/Root.plist -@@ -169,7 +169,7 @@ - - udp - tcp -- tls -+ - - Type - PSMultiValueSpecifier -@@ -177,10 +177,10 @@ - - udp - tcp -- tls -+ - - -- -+ - - DefaultValue - diff --git a/linphone-Info.plist b/linphone-Info.plist index d75adf8e8..6068e586b 100644 --- a/linphone-Info.plist +++ b/linphone-Info.plist @@ -24,7 +24,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.7.4 + 3.7.5 CFBundleURLTypes @@ -53,7 +53,7 @@ CFBundleVersion - 2.2.4.2 + 2.2.5 LSRequiresIPhoneOS UIApplicationExitsOnSuspend diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 915365ef9..5544044ec 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -127,7 +127,6 @@ 7066FC0C13E830E400EFC6DC /* libvpx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7066FC0B13E830E400EFC6DC /* libvpx.a */; }; 70E542F313E147E3002BA2C0 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F213E147E3002BA2C0 /* OpenGLES.framework */; }; 70E542F513E147EB002BA2C0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F413E147EB002BA2C0 /* QuartzCore.framework */; }; - 877ED6FD21D0CFEFA7E2A40A /* libPods-KifTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FE76362DA6217E7341ED1DF /* libPods-KifTests.a */; }; C90FAA7915AF54E6002091CB /* HistoryDetailsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C90FAA7715AF54E6002091CB /* HistoryDetailsViewController.m */; }; C9C8254315AE204D00D493FA /* options_add_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = C9C8253F15AE204D00D493FA /* options_add_disabled.png */; }; C9C8254515AE204D00D493FA /* options_transfer_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = C9C8254015AE204D00D493FA /* options_transfer_disabled.png */; }; @@ -687,6 +686,7 @@ F070E6381A2622EC00E17AFD /* incall_padding_right.png in Resources */ = {isa = PBXBuildFile; fileRef = F070E6321A2622EC00E17AFD /* incall_padding_right.png */; }; F088488A19FF8C41007FFCF3 /* UIContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F088488D19FF8C41007FFCF3 /* UIContactCell.xib */; }; F08BDC3D1A35E60F006210C9 /* liblinphonetester.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F0BB8C0F193623F200974404 /* liblinphonetester.a */; }; + F08D468D1AA86849001E8CB5 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F0B026F21AA710AF00FF49F7 /* libiconv.dylib */; }; F08F118519C09C6B007D70C2 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F03A9B3318C0CF7000C4D7FE /* XCTest.framework */; }; F08F118619C09C6B007D70C2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; F08F118719C09C6B007D70C2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; @@ -698,6 +698,7 @@ F08F11A019C0A6CB007D70C2 /* DTObjectBlockExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = F08F119F19C0A6CB007D70C2 /* DTObjectBlockExecutor.m */; }; F0938159188E629800A55DFA /* iTunesArtwork in Resources */ = {isa = PBXBuildFile; fileRef = F0938158188E629800A55DFA /* iTunesArtwork */; }; F0A1CE081A6B056E001CA2BE /* ChatTester.m in Sources */ = {isa = PBXBuildFile; fileRef = F0A1CE071A6B056E001CA2BE /* ChatTester.m */; }; + F0B026F31AA710AF00FF49F7 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F0B026F21AA710AF00FF49F7 /* libiconv.dylib */; }; F0B4FB5D1A65550B00637027 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F0B4FB5C1A65550B00637027 /* Images.xcassets */; }; F0B89C2218DC89E30050B60E /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0B89C2118DC89E30050B60E /* MediaPlayer.framework */; }; F0B89C2818DC973E0050B60E /* wizard_external_sip.rc in Resources */ = {isa = PBXBuildFile; fileRef = F0B89C2418DC973E0050B60E /* wizard_external_sip.rc */; }; @@ -774,12 +775,14 @@ F0C1F9211A2CA35A009402C9 /* sounds in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C3B19362C2200974404 /* sounds */; }; F0C1F9221A2CA35C009402C9 /* images in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C3A19362C2200974404 /* images */; }; F0C1F9231A2CA35E009402C9 /* certificates in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C3919362C2200974404 /* certificates */; }; + F0C773921A94828900E0C486 /* libKIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F0C773871A94822700E0C486 /* libKIF.a */; }; F0F952121A6AECD300254160 /* WizardTester.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F952111A6AECD300254160 /* WizardTester.m */; }; F476004B147AAF2800FFF19B /* liblinphone.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2211DB911475562600DEE054 /* liblinphone.a */; }; F84015BF1939FE37006ABAB5 /* test_failed.png in Resources */ = {isa = PBXBuildFile; fileRef = F84015BC1939FE37006ABAB5 /* test_failed.png */; }; F84015C01939FE37006ABAB5 /* test_inprogress.png in Resources */ = {isa = PBXBuildFile; fileRef = F84015BD1939FE37006ABAB5 /* test_inprogress.png */; }; F84015C11939FE37006ABAB5 /* test_passed.png in Resources */ = {isa = PBXBuildFile; fileRef = F84015BE1939FE37006ABAB5 /* test_passed.png */; }; F84015C7193B4E34006ABAB5 /* LogsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F84015C6193B4E34006ABAB5 /* LogsViewController.m */; }; + F844AB141A93E3A200428306 /* ContactsTester.m in Sources */ = {isa = PBXBuildFile; fileRef = F844AB131A93E3A200428306 /* ContactsTester.m */; }; F85554481A6DA2F400A9F915 /* LinphoneTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = F85554471A6DA2F400A9F915 /* LinphoneTestCase.m */; }; /* End PBXBuildFile section */ @@ -819,6 +822,48 @@ remoteGlobalIDString = F0BB8BD41936208100974404; remoteInfo = LinphoneTester; }; + F0C773861A94822700E0C486 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F0C7737D1A94822600E0C486 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EABD46AA1857A0C700A5F081; + remoteInfo = KIF; + }; + F0C773881A94822700E0C486 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F0C7737D1A94822600E0C486 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB72047C1680DDAD00278DA2; + remoteInfo = "KIF-OCUnit"; + }; + F0C7738A1A94822700E0C486 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F0C7737D1A94822600E0C486 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB60ECC1177F8C83005A041A; + remoteInfo = "Test Host"; + }; + F0C7738C1A94822700E0C486 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F0C7737D1A94822600E0C486 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EABD46CD1857A0F300A5F081; + remoteInfo = "KIF Tests"; + }; + F0C7738E1A94822700E0C486 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F0C7737D1A94822600E0C486 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB60ECEB177F8DB3005A041A; + remoteInfo = "KIF Tests-OCUnit"; + }; + F0C773901A94827E00E0C486 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F0C7737D1A94822600E0C486 /* KIF.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = EABD46791857A0C700A5F081; + remoteInfo = KIF; + }; F0F952061A6AEB1000254160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -955,7 +1000,6 @@ 22F254801073D99800AC9B3F /* ringback.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = ringback.wav; path = Resources/ringback.wav; sourceTree = ""; }; 288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 2E4D955A02540CAA9251DB6F /* Pods-KifTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KifTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-KifTests/Pods-KifTests.release.xcconfig"; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* linphone_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linphone_Prefix.pch; sourceTree = ""; }; 340751961506459A00B89C47 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; 340751E5150F38FC00B89C47 /* UIVideoButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIVideoButton.h; sourceTree = ""; }; @@ -968,7 +1012,6 @@ 57F005C315EE2CCF00914747 /* linphonerc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = linphonerc; path = Resources/linphonerc; sourceTree = ""; }; 57F005C615EE2D9200914747 /* linphonerc-factory */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "linphonerc-factory"; path = "Resources/linphonerc-factory"; sourceTree = ""; }; 57F005C715EE2D9200914747 /* linphonerc-factory~ipad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "linphonerc-factory~ipad"; path = "Resources/linphonerc-factory~ipad"; sourceTree = ""; }; - 58E408411081310A32F4B658 /* Pods-KifTests.distributionadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KifTests.distributionadhoc.xcconfig"; path = "Pods/Target Support Files/Pods-KifTests/Pods-KifTests.distributionadhoc.xcconfig"; sourceTree = ""; }; 631C4FAF19D2A8F2004BFE77 /* UIDigitButtonLongPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIDigitButtonLongPlus.h; sourceTree = ""; }; 631C4FB019D2A8F2004BFE77 /* UIDigitButtonLongPlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIDigitButtonLongPlus.m; sourceTree = ""; }; 631C4FB519D2C3A6004BFE77 /* UIDigitButtonLongVoiceMail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIDigitButtonLongVoiceMail.h; sourceTree = ""; }; @@ -998,7 +1041,6 @@ 70E542F213E147E3002BA2C0 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 70E542F413E147EB002BA2C0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 8D1107310486CEB800E47090 /* linphone-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "linphone-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; - 9042210E58DB7DE97CE86248 /* Pods-KifTests.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KifTests.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-KifTests/Pods-KifTests.distribution.xcconfig"; sourceTree = ""; }; C90FAA7615AF54E6002091CB /* HistoryDetailsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryDetailsViewController.h; sourceTree = ""; }; C90FAA7715AF54E6002091CB /* HistoryDetailsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryDetailsViewController.m; sourceTree = ""; }; C9B3A6FD15B485DB006F52EE /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = Utils/Utils.h; sourceTree = ""; }; @@ -1741,6 +1783,7 @@ F0AF07131A24BA780086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main_iPhone.strings; sourceTree = ""; }; F0AF07151A24BA780086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; F0AF07161A24BA780086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; + F0B026F21AA710AF00FF49F7 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; }; F0B4FB5C1A65550B00637027 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Resources/Images.xcassets; sourceTree = ""; }; F0B89C2118DC89E30050B60E /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; F0B89C2418DC973E0050B60E /* wizard_external_sip.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = wizard_external_sip.rc; path = Resources/wizard_external_sip.rc; sourceTree = ""; }; @@ -1782,6 +1825,7 @@ F0C1F90A1A28781F009402C9 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = ""; }; F0C1F90B1A28781F009402C9 /* strech-bottom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "strech-bottom.png"; sourceTree = ""; }; F0C1F90C1A28781F009402C9 /* strech-top.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "strech-top.png"; sourceTree = ""; }; + F0C7737D1A94822600E0C486 /* KIF.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = KIF.xcodeproj; path = Classes/KIF/KIF.xcodeproj; sourceTree = SOURCE_ROOT; }; F0F952001A6AEB1000254160 /* KifTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KifTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; F0F952031A6AEB1000254160 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F0F952111A6AECD300254160 /* WizardTester.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WizardTester.m; sourceTree = ""; }; @@ -1790,9 +1834,10 @@ F84015BE1939FE37006ABAB5 /* test_passed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test_passed.png; path = Resources/test_passed.png; sourceTree = ""; }; F84015C5193B4E34006ABAB5 /* LogsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogsViewController.h; sourceTree = ""; }; F84015C6193B4E34006ABAB5 /* LogsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LogsViewController.m; sourceTree = ""; }; + F844AB121A93E3A200428306 /* ContactsTester.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactsTester.h; sourceTree = ""; }; + F844AB131A93E3A200428306 /* ContactsTester.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactsTester.m; sourceTree = ""; }; F85554461A6DA2F400A9F915 /* LinphoneTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinphoneTestCase.h; sourceTree = ""; }; F85554471A6DA2F400A9F915 /* LinphoneTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinphoneTestCase.m; sourceTree = ""; }; - F8DB48A1936CB14E39F5981D /* Pods-KifTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KifTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-KifTests/Pods-KifTests.debug.xcconfig"; sourceTree = ""; }; FD979F30169E84670022A8B4 /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = Resources/ru.lproj/Localizable.strings; sourceTree = ""; }; /* End PBXFileReference section */ @@ -1801,6 +1846,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + F0B026F31AA710AF00FF49F7 /* libiconv.dylib in Frameworks */, F05BAA621A5D594E00411815 /* libz.dylib in Frameworks */, 1560821F18EEF26100765332 /* libmsopenh264.a in Frameworks */, 22509042196BD902007863F6 /* libopenh264.a in Frameworks */, @@ -1875,6 +1921,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + F08D468D1AA86849001E8CB5 /* libiconv.dylib in Frameworks */, F05BAA631A5D75BC00411815 /* libz.dylib in Frameworks */, F0BB8C4D193631DF00974404 /* AVFoundation.framework in Frameworks */, F0BB8C4C193631D200974404 /* CoreMedia.framework in Frameworks */, @@ -1922,7 +1969,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 877ED6FD21D0CFEFA7E2A40A /* libPods-KifTests.a in Frameworks */, + F0C773921A94828900E0C486 /* libKIF.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2130,17 +2177,15 @@ children = ( 633E388219FFB0F400936D1C /* README.md */, 080E96DDFE201D6D7F000001 /* Classes */, - F0F952011A6AEB1000254160 /* KifTests */, + F0F952011A6AEB1000254160 /* UITests */, 29B97323FDCFA39411CA2CEA /* Frameworks */, F04892FE180C3296002FED35 /* ImageOptim.sh */, F0938158188E629800A55DFA /* iTunesArtwork */, F0BB8BD91936208100974404 /* LinphoneTester */, - F08F118819C09C6B007D70C2 /* LinphoneTester Tests */, 29B97315FDCFA39411CA2CEA /* Other Sources */, 19C28FACFE9D520D11CA2CBB /* Products */, 29B97317FDCFA39411CA2CEA /* Resources */, D398D3031594B0FB00FD553C /* Settings */, - 60099578873114C41E4882F8 /* Pods */, ); name = CustomTemplate; sourceTree = ""; @@ -2185,6 +2230,7 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( + F0B026F21AA710AF00FF49F7 /* libiconv.dylib */, F05BAA611A5D594E00411815 /* libz.dylib */, 22B5F03410CE6B2F00777D97 /* AddressBook.framework */, 22B5EFA210CE50BD00777D97 /* AddressBookUI.framework */, @@ -2257,17 +2303,6 @@ name = Frameworks; sourceTree = ""; }; - 60099578873114C41E4882F8 /* Pods */ = { - isa = PBXGroup; - children = ( - F8DB48A1936CB14E39F5981D /* Pods-KifTests.debug.xcconfig */, - 2E4D955A02540CAA9251DB6F /* Pods-KifTests.release.xcconfig */, - 9042210E58DB7DE97CE86248 /* Pods-KifTests.distribution.xcconfig */, - 58E408411081310A32F4B658 /* Pods-KifTests.distributionadhoc.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; D326483415887D4400930C67 /* Utils */ = { isa = PBXGroup; children = ( @@ -2457,7 +2492,7 @@ F08F118919C09C6B007D70C2 /* Supporting Files */, ); path = "LinphoneTester Tests"; - sourceTree = ""; + sourceTree = SOURCE_ROOT; }; F08F118919C09C6B007D70C2 /* Supporting Files */ = { isa = PBXGroup; @@ -2960,6 +2995,7 @@ F0BB8BD91936208100974404 /* LinphoneTester */ = { isa = PBXGroup; children = ( + F08F118819C09C6B007D70C2 /* LinphoneTester Tests */, F0BB8BE21936208100974404 /* AppDelegate.h */, F0BB8BE31936208100974404 /* AppDelegate.m */, F0BB8BEE1936208200974404 /* DetailViewController.h */, @@ -3012,9 +3048,22 @@ path = Resources/launchscreen; sourceTree = ""; }; - F0F952011A6AEB1000254160 /* KifTests */ = { + F0C7737E1A94822600E0C486 /* Products */ = { isa = PBXGroup; children = ( + F0C773871A94822700E0C486 /* libKIF.a */, + F0C773891A94822700E0C486 /* libKIF-OCUnit.a */, + F0C7738B1A94822700E0C486 /* Test Host.app */, + F0C7738D1A94822700E0C486 /* KIF Tests - XCTest.xctest */, + F0C7738F1A94822700E0C486 /* KIF Tests-OCUnit.octest */, + ); + name = Products; + sourceTree = ""; + }; + F0F952011A6AEB1000254160 /* UITests */ = { + isa = PBXGroup; + children = ( + F0C7737D1A94822600E0C486 /* KIF.xcodeproj */, F0F952021A6AEB1000254160 /* Supporting Files */, F0F952111A6AECD300254160 /* WizardTester.m */, F0A1CE091A6B05A4001CA2BE /* WizardTester.h */, @@ -3022,7 +3071,10 @@ F0A1CE071A6B056E001CA2BE /* ChatTester.m */, F85554461A6DA2F400A9F915 /* LinphoneTestCase.h */, F85554471A6DA2F400A9F915 /* LinphoneTestCase.m */, + F844AB121A93E3A200428306 /* ContactsTester.h */, + F844AB131A93E3A200428306 /* ContactsTester.m */, ); + name = UITests; path = KifTests; sourceTree = ""; }; @@ -3099,15 +3151,14 @@ isa = PBXNativeTarget; buildConfigurationList = F0F9520C1A6AEB1100254160 /* Build configuration list for PBXNativeTarget "KifTests" */; buildPhases = ( - 0B22B73E22C69EAFDC887972 /* Check Pods Manifest.lock */, F0F951FC1A6AEB1000254160 /* Sources */, F0F951FD1A6AEB1000254160 /* Frameworks */, F0F951FE1A6AEB1000254160 /* Resources */, - 44F0A710CE6C6548D01CE14B /* Copy Pods Resources */, ); buildRules = ( ); dependencies = ( + F0C773911A94827E00E0C486 /* PBXTargetDependency */, F0F952071A6AEB1000254160 /* PBXTargetDependency */, ); name = KifTests; @@ -3158,6 +3209,10 @@ mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; projectDirPath = ""; projectReferences = ( + { + ProductGroup = F0C7737E1A94822600E0C486 /* Products */; + ProjectRef = F0C7737D1A94822600E0C486 /* KIF.xcodeproj */; + }, { ProductGroup = D3B90E1215C2CB5700F64F8C /* Products */; ProjectRef = D3B90E1115C2CB5700F64F8C /* NinePatch.xcodeproj */; @@ -3192,6 +3247,41 @@ remoteRef = D3B90E1815C2CB5800F64F8C /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + F0C773871A94822700E0C486 /* libKIF.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libKIF.a; + remoteRef = F0C773861A94822700E0C486 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F0C773891A94822700E0C486 /* libKIF-OCUnit.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libKIF-OCUnit.a"; + remoteRef = F0C773881A94822700E0C486 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F0C7738B1A94822700E0C486 /* Test Host.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = "Test Host.app"; + remoteRef = F0C7738A1A94822700E0C486 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F0C7738D1A94822700E0C486 /* KIF Tests - XCTest.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "KIF Tests - XCTest.xctest"; + remoteRef = F0C7738C1A94822700E0C486 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F0C7738F1A94822700E0C486 /* KIF Tests-OCUnit.octest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "KIF Tests-OCUnit.octest"; + remoteRef = F0C7738E1A94822700E0C486 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -3792,36 +3882,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0B22B73E22C69EAFDC887972 /* Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - 44F0A710CE6C6548D01CE14B /* Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-KifTests/Pods-KifTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 63DCC71D1A07B08E00916627 /* Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -3995,6 +4055,7 @@ buildActionMask = 2147483647; files = ( F0A1CE081A6B056E001CA2BE /* ChatTester.m in Sources */, + F844AB141A93E3A200428306 /* ContactsTester.m in Sources */, F85554481A6DA2F400A9F915 /* LinphoneTestCase.m in Sources */, F0F952121A6AECD300254160 /* WizardTester.m in Sources */, ); @@ -4018,6 +4079,11 @@ target = F0BB8BD41936208100974404 /* LinphoneTester */; targetProxy = F08F119119C09C6B007D70C2 /* PBXContainerItemProxy */; }; + F0C773911A94827E00E0C486 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KIF; + targetProxy = F0C773901A94827E00E0C486 /* PBXContainerItemProxy */; + }; F0F952071A6AEB1000254160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1D6058900D05DD3D006BFB54 /* linphone */; @@ -5181,7 +5247,6 @@ }; F0F952081A6AEB1000254160 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F8DB48A1936CB14E39F5981D /* Pods-KifTests.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -5217,6 +5282,12 @@ INFOPLIST_FILE = KifTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + XCTest, + "-ObjC", + ); PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/linphone.app/linphone"; @@ -5225,7 +5296,6 @@ }; F0F952091A6AEB1000254160 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2E4D955A02540CAA9251DB6F /* Pods-KifTests.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -5255,6 +5325,12 @@ INFOPLIST_FILE = KifTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + XCTest, + "-ObjC", + ); PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/linphone.app/linphone"; @@ -5264,7 +5340,6 @@ }; F0F9520A1A6AEB1000254160 /* Distribution */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9042210E58DB7DE97CE86248 /* Pods-KifTests.distribution.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -5294,6 +5369,12 @@ INFOPLIST_FILE = KifTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + XCTest, + "-ObjC", + ); PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/linphone.app/linphone"; @@ -5303,7 +5384,6 @@ }; F0F9520B1A6AEB1000254160 /* DistributionAdhoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E408411081310A32F4B658 /* Pods-KifTests.distributionadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -5333,6 +5413,12 @@ INFOPLIST_FILE = KifTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + XCTest, + "-ObjC", + ); PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/linphone.app/linphone"; diff --git a/linphone.xcworkspace/contents.xcworkspacedata b/linphone.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ea0a8d734..000000000 --- a/linphone.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/belle-sip b/submodules/belle-sip index eed16af00..e5e0590db 160000 --- a/submodules/belle-sip +++ b/submodules/belle-sip @@ -1 +1 @@ -Subproject commit eed16af0014ba89fec25b4351f06f60297600381 +Subproject commit e5e0590db8917ccbf5631ec42022bb9f8e03b064 diff --git a/submodules/build/Makefile b/submodules/build/Makefile index 96df5837d..82e8e5356 100644 --- a/submodules/build/Makefile +++ b/submodules/build/Makefile @@ -25,8 +25,9 @@ enable_ffmpeg=yes enable_opus=yes enable_debug=no -TUNNEL_AVAILABLE=$(shell git submodule status ../tunnel 2>/dev/null 1>/dev/null && echo yes) + +TUNNEL_AVAILABLE=$(shell git submodule status ../tunnel 2>/dev/null 1>/dev/null && echo yes) ifneq ($(TUNNEL_AVAILABLE),) enable_tunnel=yes enable_gpl_third_parties=no @@ -35,7 +36,7 @@ else endif -.NOTPARALLEL all: check_options build warning +.NOTPARALLEL all: checks build warning # check that the selected options are correct CHECKOPT_MSG := "" @@ -45,6 +46,8 @@ ifeq ($(enable_gpl_third_parties)$(enable_ffmpeg),noyes) enable_ffmpeg:=no endif +checks: check_options check_progs + ifneq ($(CHECKOPT_MSG),"") check_options: @echo $(CHECKOPT_MSG) @@ -52,6 +55,25 @@ else check_options: endif +# you can skip the tool check by export BYPASS_TOOLCHECK=1 +ifneq ($(BYPASS_TOOLCHECK),1) + +# Checks +CHECK_MSG=$(shell ../../Tools/check_tools.sh) + +check_progs: + ifneq ($(CHECK_MSG),) + $(error Some tools are missing.) + else + $(info All tools are present.) + endif + +else +check_progs: + $(info Skipping tool checks) +endif + + # setup footer ifeq ($(enable_gpl_third_parties),yes) @@ -108,12 +130,12 @@ broadcast_%: @echo "Broadcasting target '$*' to all sub-architectures" make -f builder-iphone-simulator.mk $(LINPHONE_OPTIONS) $* \ && make -f builder-iphone-os.mk $(LINPHONE_OPTIONS) $* \ - && make -f builder-iphone-os.mk host=aarch64-apple-darwin $(LINPHONE_OPTIONS) $* + && make -f builder-iphone-os.mk host=aarch64-apple-darwin $(LINPHONE_OPTIONS) $* build-% clean-% veryclean-%: make -f builder-iphone-simulator.mk $(LINPHONE_OPTIONS) $@ \ && make -f builder-iphone-os.mk $(LINPHONE_OPTIONS) $@ \ - && make -f builder-iphone-os.mk host=aarch64-apple-darwin $(LINPHONE_OPTIONS) $@ + && make -f builder-iphone-os.mk host=aarch64-apple-darwin $(LINPHONE_OPTIONS) $@ sdk: make -f builder-iphone-os.mk delivery-sdk @@ -135,6 +157,11 @@ veryclean: broadcast_veryclean list-packages: @make -f builder-iphone-os.mk list-packages +pull-transifex: + cd ../../ && tx pull -af + +push-transifex: + cd ../../ && ./Tools/generate_strings_files.sh && tx push -s -t -f --no-interactive zipres: @tar -C ../.. -czf ../../ios_assets.tar.gz Resources iTunesArtwork diff --git a/submodules/build/builder-iphone-os.mk b/submodules/build/builder-iphone-os.mk index e53426af9..32f4a628d 100644 --- a/submodules/build/builder-iphone-os.mk +++ b/submodules/build/builder-iphone-os.mk @@ -39,7 +39,9 @@ linphone_configure_controls = \ --disable-tutorials \ --disable-tools \ --enable-msg-storage=yes \ - --enable-ios + --enable-ios \ + --with-polarssl=$(prefix) \ + --enable-dtls #path diff --git a/submodules/build/builders.d/gsm.mk b/submodules/build/builders.d/gsm.mk index b8cbaace9..e3c462fb2 100644 --- a/submodules/build/builders.d/gsm.mk +++ b/submodules/build/builders.d/gsm.mk @@ -12,7 +12,7 @@ build-libgsm: cd $(BUILDER_BUILD_DIR)/$(gsm_dir)\ && mkdir -p $(prefix)/include/gsm \ && host_alias=$(host) . $(BUILDER_SRC_DIR)/build/$(config_site) \ - && make -j1 CC="$${CC}" INSTALL_ROOT=$(prefix) GSM_INSTALL_INC=$(prefix)/include/gsm install + && make -j1 CC="$${CC}" INSTALL_ROOT=$(prefix) GSM_INSTALL_INC=$(prefix)/include/gsm install clean-libgsm: cd $(BUILDER_BUILD_DIR)/$(gsm_dir)\ diff --git a/submodules/build/builders.d/polarssl.mk b/submodules/build/builders.d/polarssl.mk index a3e476a4e..3aabf5fc5 100644 --- a/submodules/build/builders.d/polarssl.mk +++ b/submodules/build/builders.d/polarssl.mk @@ -11,17 +11,16 @@ $(BUILD_DIR)/$(polarssl_dir)/Makefile: $(SRC_DIR)/$(polarssl_dir)/configure mkdir -p $(BUILD_DIR)/$(polarssl_dir) cd $(BUILD_DIR)/$(polarssl_dir) \ && PKG_CONFIG_LIBDIR=$(prefix)/lib/pkgconfig CONFIG_SITE=$(SRC_DIR)/build/$(config_site) \ - $(SRC_DIR)/$(polarssl_dir)/configure --prefix=$(prefix) --host=$(host) ${library_mode} + $(SRC_DIR)/$(polarssl_dir)/configure --prefix=$(prefix) --host=$(host) ${library_mode} build-polarssl: $(BUILD_DIR)/$(polarssl_dir)/Makefile cd $(BUILD_DIR)/${polarssl_dir} && \ - host_alias=$(host) && . $(SRC_DIR)/build/$(config_site) && \ - make && make install + host_alias=$(host) PKG_CONFIG_LIBDIR=$(prefix)/lib/pkgconfig CONFIG_SITE=$(SRC_DIR)/build/$(config_site) make && make install clean-polarssl: -cd $(BUILD_DIR)/$(polarssl_dir) && make clean -veryclean-polarssl: +veryclean-polarssl: -rm -rf $(BUILD_DIR)/$(polarssl_dir) clean-makefile-polarssl: veryclean-polarssl diff --git a/submodules/bzrtp b/submodules/bzrtp index 0948658db..9f8dd8163 160000 --- a/submodules/bzrtp +++ b/submodules/bzrtp @@ -1 +1 @@ -Subproject commit 0948658db85a7c9933ed2d39a159239d9ee5c734 +Subproject commit 9f8dd816398daa0e9516a3f2e1605ca188f25abf diff --git a/submodules/externals/polarssl b/submodules/externals/polarssl index e46939b25..ab2f403a3 160000 --- a/submodules/externals/polarssl +++ b/submodules/externals/polarssl @@ -1 +1 @@ -Subproject commit e46939b25c990d825d94c2d526c350a1380db67f +Subproject commit ab2f403a3e0ec91257f0e943129c0eec272f34e8 diff --git a/submodules/libilbc-rfc3951 b/submodules/libilbc-rfc3951 index 488f21593..9ab4928dc 160000 --- a/submodules/libilbc-rfc3951 +++ b/submodules/libilbc-rfc3951 @@ -1 +1 @@ -Subproject commit 488f2159378d2c1956135604736dfddaeb947ef5 +Subproject commit 9ab4928dcacaa1ef35a7bdc328d706a4569f29a3 diff --git a/submodules/linphone b/submodules/linphone index 006e1ead5..29873fe5e 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 006e1ead57498ef488b53eb0988fde8b8ef9dd3c +Subproject commit 29873fe5e1426aea4247b3146ca8fc5c017ec480 diff --git a/submodules/msopenh264 b/submodules/msopenh264 index 394ccd39a..6c2cf04b5 160000 --- a/submodules/msopenh264 +++ b/submodules/msopenh264 @@ -1 +1 @@ -Subproject commit 394ccd39acc5671442bd966a54feab39518e5d99 +Subproject commit 6c2cf04b56b226be7bbc4f0ebe47fe937806ac73 diff --git a/submodules/mssilk b/submodules/mssilk index 748a6b090..dcb4798df 160000 --- a/submodules/mssilk +++ b/submodules/mssilk @@ -1 +1 @@ -Subproject commit 748a6b090279e210aa5e8efc0e0719678448a426 +Subproject commit dcb4798df328186b3d177d10af5145aafed8352e