From 5703392b1ca8a0708600d234974f0c63e7198e9a Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Tue, 17 Feb 2015 23:03:31 +0100 Subject: [PATCH 01/48] Add some unit tests --- Classes/ChatTableViewController.m | 2 +- Classes/ContactDetailsTableViewController.h | 9 +++ Classes/ContactDetailsTableViewController.m | 10 +-- Classes/LinphoneUI/UIContactDetailsHeader.m | 1 + KifTests/ChatTester.m | 38 ++++++++++ KifTests/ContactsTester.h | 13 ++++ KifTests/ContactsTester.m | 78 +++++++++++++++++++++ KifTests/LinphoneTestCase.h | 1 + KifTests/LinphoneTestCase.m | 10 ++- linphone.xcodeproj/project.pbxproj | 6 ++ 10 files changed, 158 insertions(+), 10 deletions(-) create mode 100644 KifTests/ContactsTester.h create mode 100644 KifTests/ContactsTester.m 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/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/KifTests/ChatTester.m b/KifTests/ChatTester.m index 66e200519..3efa05abe 100644 --- a/KifTests/ChatTester.m +++ b/KifTests/ChatTester.m @@ -7,6 +7,7 @@ // #import "ChatTester.h" +#include "LinphoneManager.h" @implementation ChatTester @@ -98,5 +99,42 @@ [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"); + } + + // 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..a0a9a7838 --- /dev/null +++ b/KifTests/ContactsTester.m @@ -0,0 +1,78 @@ +// +// 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:@"Firstname, Lastname" value: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]; +} + +@end diff --git a/KifTests/LinphoneTestCase.h b/KifTests/LinphoneTestCase.h index 1417de9ce..1bfd3beb5 100644 --- a/KifTests/LinphoneTestCase.h +++ b/KifTests/LinphoneTestCase.h @@ -16,5 +16,6 @@ - (NSString*)accountDomain; - (NSString*)getUUID; +- (NSArray*)getUUIDArrayOfSize:(size_t)size; @end diff --git a/KifTests/LinphoneTestCase.m b/KifTests/LinphoneTestCase.m index b0aa88ab9..5b39e5f31 100644 --- a/KifTests/LinphoneTestCase.m +++ b/KifTests/LinphoneTestCase.m @@ -17,7 +17,7 @@ + (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 { @@ -32,6 +32,14 @@ return [[NSUUID UUID] UUIDString]; } +- (NSArray *)getUUIDArrayOfSize:(size_t)size { + NSMutableArray* array = [NSMutableArray arrayWithCapacity:size]; + for (NSInteger i=0; i Date: Wed, 18 Feb 2015 09:10:23 +0100 Subject: [PATCH 02/48] Some cosmetics --- Classes/ContactDetailsViewController.m | 2 +- Classes/LinphoneAppDelegate.m | 1 - Classes/LinphoneManager.m | 14 ++++++-------- Classes/PhoneMainView.m | 1 + Classes/Utils/FastAddressBook.m | 3 ++- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Classes/ContactDetailsViewController.m b/Classes/ContactDetailsViewController.m index e100d3fe6..35f010ae3 100644 --- a/Classes/ContactDetailsViewController.m +++ b/Classes/ContactDetailsViewController.m @@ -225,7 +225,7 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf } else { [editButton setHidden:TRUE]; } - } +} #pragma mark - UICompositeViewDelegate Functions diff --git a/Classes/LinphoneAppDelegate.m b/Classes/LinphoneAppDelegate.m index b6b487a44..ae4adeb89 100644 --- a/Classes/LinphoneAppDelegate.m +++ b/Classes/LinphoneAppDelegate.m @@ -477,7 +477,6 @@ otherButtonTitles:nil]; [error show]; [error release]; - } } diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index e0d639045..994127187 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -585,10 +585,9 @@ static void linphone_iphone_log(struct _LinphoneCore * lc, const char * message) - (void)displayStatus:(NSString*) message { // Post event - NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: - message, @"message", - nil]; - [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneDisplayStatusUpdate object:self userInfo:dict]; + [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneDisplayStatusUpdate + object:self + userInfo:@{@"message":message}]; } @@ -788,10 +787,9 @@ static void linphone_iphone_display_status(struct _LinphoneCore * lc, const char [self setupGSMInteraction]; } // Post event - NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: - [NSValue valueWithPointer:call], @"call", - [NSNumber numberWithInt:state], @"state", - [NSString stringWithUTF8String:message], @"message", nil]; + NSDictionary* dict = @{@"call": [NSValue valueWithPointer:call], + @"state": [NSNumber numberWithInt:state], + @"message":[NSString stringWithUTF8String:message]}; [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneCallUpdate object:self userInfo:dict]; } diff --git a/Classes/PhoneMainView.m b/Classes/PhoneMainView.m index bf240e618..b4c070454 100644 --- a/Classes/PhoneMainView.m +++ b/Classes/PhoneMainView.m @@ -325,6 +325,7 @@ static RootViewManager* rootViewManagerInstance = nil; switch (state) { case LinphoneCallIncomingReceived: + case LinphoneCallIncomingEarlyMedia: { [self displayIncomingCall:call]; break; diff --git a/Classes/Utils/FastAddressBook.m b/Classes/Utils/FastAddressBook.m index 47e5a5b05..c876a277b 100644 --- a/Classes/Utils/FastAddressBook.m +++ b/Classes/Utils/FastAddressBook.m @@ -210,7 +210,8 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf [addressBookMap setObject:lPerson forKey:lNormalizedKey]; CFRelease(lValue); if (lLabel) CFRelease(lLabel); - if (lLocalizedLabel) CFRelease(lLocalizedLabel); } + if (lLocalizedLabel) CFRelease(lLocalizedLabel); + } CFRelease(lMap); } } From 081e941f36c1ae20976caf362cdc950be617cce5 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 18 Feb 2015 10:27:07 +0100 Subject: [PATCH 03/48] Move KIF framework dependency out of CocoaPods and into a submodule. This will ease the compilation. --- .gitmodules | 4 + Classes/KIF | 1 + KifTests/LinphoneTestCase.m | 2 +- Podfile | 19 -- linphone.xcodeproj/project.pbxproj | 165 ++++++++++++++---- linphone.xcworkspace/contents.xcworkspacedata | 10 -- 6 files changed, 133 insertions(+), 68 deletions(-) create mode 160000 Classes/KIF delete mode 100644 Podfile delete mode 100644 linphone.xcworkspace/contents.xcworkspacedata diff --git a/.gitmodules b/.gitmodules index 53f206076..516d2b1a9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -76,3 +76,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/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/KifTests/LinphoneTestCase.m b/KifTests/LinphoneTestCase.m index 5b39e5f31..3482732db 100644 --- a/KifTests/LinphoneTestCase.m +++ b/KifTests/LinphoneTestCase.m @@ -10,7 +10,7 @@ #import "LinphoneManager.h" -#import +#import "KIF/KIFTypist.h" @implementation LinphoneTestCase diff --git a/Podfile b/Podfile deleted file mode 100644 index 07418ae6a..000000000 --- a/Podfile +++ /dev/null @@ -1,19 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '6.0' - -target 'linphone' do - -end - -target 'LinphoneTester' do - -end - -target 'LinphoneTester Tests' do - -end - -target 'KifTests', :exclusive => true do - pod 'KIF', '~> 3.0' -end - diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index dae1b418b..a3cdf7cef 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 */; }; @@ -774,6 +773,7 @@ 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 */; }; @@ -820,6 +820,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 */; @@ -1783,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 = ""; }; @@ -1925,7 +1968,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 877ED6FD21D0CFEFA7E2A40A /* libPods-KifTests.a in Frameworks */, + F0C773921A94828900E0C486 /* libKIF.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3015,9 +3058,22 @@ path = Resources/launchscreen; sourceTree = ""; }; + 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 /* KifTests */ = { isa = PBXGroup; children = ( + F0C7737D1A94822600E0C486 /* KIF.xcodeproj */, F0F952021A6AEB1000254160 /* Supporting Files */, F0F952111A6AECD300254160 /* WizardTester.m */, F0A1CE091A6B05A4001CA2BE /* WizardTester.h */, @@ -3104,15 +3160,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; @@ -3163,6 +3218,10 @@ mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; projectDirPath = ""; projectReferences = ( + { + ProductGroup = F0C7737E1A94822600E0C486 /* Products */; + ProjectRef = F0C7737D1A94822600E0C486 /* KIF.xcodeproj */; + }, { ProductGroup = D3B90E1215C2CB5700F64F8C /* Products */; ProjectRef = D3B90E1115C2CB5700F64F8C /* NinePatch.xcodeproj */; @@ -3197,6 +3256,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 */ @@ -3797,36 +3891,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; @@ -4024,6 +4088,11 @@ target = F0BB8BD41936208100974404 /* LinphoneTester */; targetProxy = F08F119119C09C6B007D70C2 /* PBXContainerItemProxy */; }; + F0C773911A94827E00E0C486 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KIF; + targetProxy = F0C773901A94827E00E0C486 /* PBXContainerItemProxy */; + }; F0F952071A6AEB1000254160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1D6058900D05DD3D006BFB54 /* linphone */; @@ -5187,7 +5256,6 @@ }; F0F952081A6AEB1000254160 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F8DB48A1936CB14E39F5981D /* Pods-KifTests.debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -5223,6 +5291,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"; @@ -5231,7 +5305,6 @@ }; F0F952091A6AEB1000254160 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2E4D955A02540CAA9251DB6F /* Pods-KifTests.release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -5261,6 +5334,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"; @@ -5270,7 +5349,6 @@ }; F0F9520A1A6AEB1000254160 /* Distribution */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9042210E58DB7DE97CE86248 /* Pods-KifTests.distribution.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -5300,6 +5378,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"; @@ -5309,7 +5393,6 @@ }; F0F9520B1A6AEB1000254160 /* DistributionAdhoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58E408411081310A32F4B658 /* Pods-KifTests.distributionadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -5339,6 +5422,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 @@ - - - - - - - From 2c163da51741340ac451d53ecee50a9a379c1b15 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 18 Feb 2015 10:28:22 +0100 Subject: [PATCH 04/48] Update README for new KIF use case. --- README.md | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index c4b2f6384..1092f11f3 100644 --- a/README.md +++ b/README.md @@ -91,21 +91,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 From c70325edead4709e8b9bdb62fb3287d27293a5e9 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 18 Feb 2015 10:29:05 +0100 Subject: [PATCH 05/48] Use localized strings in tester (not yet complete) --- KifTests/ChatTester.m | 30 +++++++++++++++--------------- KifTests/LinphoneTestCase.h | 2 ++ KifTests/LinphoneTestCase.m | 18 +++++++++--------- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/KifTests/ChatTester.m b/KifTests/ChatTester.m index 3efa05abe..615f095bc 100644 --- a/KifTests/ChatTester.m +++ b/KifTests/ChatTester.m @@ -18,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")]; } @@ -45,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]; } @@ -57,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{ @@ -66,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]; } @@ -78,11 +78,11 @@ [self startChatWith:user]; [self sendMessage:@"Hello Bro"]; - [tester tapViewWithAccessibilityLabel:@"Edit" traits:UIAccessibilityTraitButton]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Edit") traits:UIAccessibilityTraitButton]; - [tester tapViewWithAccessibilityLabel:@"Delete message"]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Delete message")]; - [tester tapViewWithAccessibilityLabel:@"Edit" traits:UIAccessibilityTraitButton]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Edit") traits:UIAccessibilityTraitButton]; diff --git a/KifTests/LinphoneTestCase.h b/KifTests/LinphoneTestCase.h index 1bfd3beb5..452135db3 100644 --- a/KifTests/LinphoneTestCase.h +++ b/KifTests/LinphoneTestCase.h @@ -8,6 +8,8 @@ #import +#define LOCALIZED(X) NSLocalizedString(X, nil) + @interface LinphoneTestCase : KIFTestCase @property BOOL invalidAccountSet; diff --git a/KifTests/LinphoneTestCase.m b/KifTests/LinphoneTestCase.m index 3482732db..efbbb1c3f 100644 --- a/KifTests/LinphoneTestCase.m +++ b/KifTests/LinphoneTestCase.m @@ -91,23 +91,23 @@ static bool invalidAccount = true; if( invalidAccount && ! [self hasValidProxyConfig] ){ - [tester tapViewWithAccessibilityLabel:@"Settings"]; - [tester tapViewWithAccessibilityLabel:@"Run assistant"]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Settings")]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Wizard")]; [tester waitForTimeInterval:0.5]; - if( [tester tryFindingViewWithAccessibilityLabel:@"Launch Wizard" error:nil]){ - [tester tapViewWithAccessibilityLabel:@"Launch Wizard"]; + if( [tester tryFindingViewWithAccessibilityLabel:LOCALIZED(@"Launch Wizard") error:nil]){ + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Launch Wizard")]; [tester waitForTimeInterval:0.5]; } NSLog(@"Switching to a valid account"); - [tester tapViewWithAccessibilityLabel:@"Start"]; - [tester tapViewWithAccessibilityLabel:@"Sign in linphone.org account"]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Start")]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Sign in linphone.org account")]; - [tester enterText:@"testios" intoViewWithAccessibilityLabel:@"Username"]; - [tester enterText:@"testtest" intoViewWithAccessibilityLabel:@"Password"]; + [tester enterText:@"testios" intoViewWithAccessibilityLabel:LOCALIZED(@"Username")]; + [tester enterText:@"testtest" intoViewWithAccessibilityLabel:LOCALIZED(@"Password")]; - [tester tapViewWithAccessibilityLabel:@"Sign in"]; + [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Sign in")]; invalidAccount = false; } From ab1a7b82e655269d857c02350019be85c70f8e3e Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 18 Feb 2015 15:25:40 +0100 Subject: [PATCH 06/48] Update linphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 006e1ead5..229f662b9 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 006e1ead57498ef488b53eb0988fde8b8ef9dd3c +Subproject commit 229f662b9f0404d2f5f6acf8fc572e9e4315cb08 From 4c32a1ea20b9a8ac931a578978c4418d9324291b Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 18 Feb 2015 13:39:22 +0100 Subject: [PATCH 07/48] Update mssilk --- submodules/mssilk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From beb03df7a6d5eab5cf3362692f5f88fb7024cb8f Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 18 Feb 2015 16:13:41 +0100 Subject: [PATCH 08/48] Remove old file --- disable-security.patch | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 disable-security.patch 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 - From d902a4e70ab45581caddd73b878cb440c5ad10c8 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Thu, 19 Feb 2015 09:39:48 +0100 Subject: [PATCH 09/48] =?UTF-8?q?Fix=20tester.=20Actually,=20localization?= =?UTF-8?q?=20of=20accessibility=20labels=20won=E2=80=99t=20work=20in=20Se?= =?UTF-8?q?ttings=20for=20now.=20Solution=20might=20be=20to=20take=20the?= =?UTF-8?q?=20Settings=20bundle=20localization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KifTests/LinphoneTestCase.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KifTests/LinphoneTestCase.m b/KifTests/LinphoneTestCase.m index efbbb1c3f..542cdb12d 100644 --- a/KifTests/LinphoneTestCase.m +++ b/KifTests/LinphoneTestCase.m @@ -92,7 +92,7 @@ static bool invalidAccount = true; if( invalidAccount && ! [self hasValidProxyConfig] ){ [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Settings")]; - [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Wizard")]; + [tester tapViewWithAccessibilityLabel:@"Run assistant"]; [tester waitForTimeInterval:0.5]; if( [tester tryFindingViewWithAccessibilityLabel:LOCALIZED(@"Launch Wizard") error:nil]){ [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Launch Wizard")]; From 0fa635dc6864079c252b9176a20dfc06a7652138 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Fri, 20 Feb 2015 11:27:53 +0100 Subject: [PATCH 10/48] Allow to clear the proxy config with a button in the settings. --- Classes/FirstLoginViewController.m | 2 +- Classes/LinphoneCoreSettingsStore.m | 2 +- Classes/SettingsViewController.m | 29 +++++++++++++++---- Classes/WizardViewController.m | 2 +- Settings/InAppSettings.bundle/Root.plist | 8 +++++ .../ar.lproj/Root.strings | 3 ++ .../en.lproj/Root.strings | 3 ++ .../fr.lproj/Root.strings | 3 ++ .../ru.lproj/Root.strings | 3 ++ 9 files changed, 47 insertions(+), 8 deletions(-) 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/LinphoneCoreSettingsStore.m b/Classes/LinphoneCoreSettingsStore.m index 2327a34d0..d37f40c4a 100644 --- a/Classes/LinphoneCoreSettingsStore.m +++ b/Classes/LinphoneCoreSettingsStore.m @@ -438,7 +438,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: diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index e1a53e5ee..733df0327 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) @@ -686,6 +688,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 +704,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 +715,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/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 From 33b5fbad19cb33a8c5f1b61f97e318cf4248f65a Mon Sep 17 00:00:00 2001 From: Gautier Date: Fri, 20 Feb 2015 02:03:41 -0800 Subject: [PATCH 11/48] Update README: use more concise instuctions and add a check environment tools which verify everything is installed before building the application --- README.md | 21 +++++++++----- Tools/check_tools.sh | 58 +++++++++++++++++++++++++++++++++++++++ submodules/build/Makefile | 10 ++++++- 3 files changed, 81 insertions(+), 8 deletions(-) create mode 100755 Tools/check_tools.sh diff --git a/README.md b/README.md index 1092f11f3..a8c22f7c2 100644 --- a/README.md +++ b/README.md @@ -4,19 +4,26 @@ ## 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-preprosessor.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 diff --git a/Tools/check_tools.sh b/Tools/check_tools.sh new file mode 100755 index 000000000..32fd89a4a --- /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 antlr3 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/submodules/build/Makefile b/submodules/build/Makefile index 9c1e1499c..62e0509df 100644 --- a/submodules/build/Makefile +++ b/submodules/build/Makefile @@ -25,8 +25,16 @@ enable_ffmpeg=yes enable_opus=yes enable_debug=no -TUNNEL_AVAILABLE=$(shell git submodule status ../tunnel 2>/dev/null 1>/dev/null && echo yes) +# Checks +CHECK_MSG=$(shell ../../Tools/check_tools.sh) + +ifneq ($(CHECK_MSG),) + $(error Some tools are missing.) +endif + + +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 From b313bfc0ef190f78f3599a00f2cea355d5d3b035 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Fri, 20 Feb 2015 16:12:34 +0100 Subject: [PATCH 12/48] We cannot check antlr3 since this is only a jar --- Tools/check_tools.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/check_tools.sh b/Tools/check_tools.sh index 32fd89a4a..66bd67a2a 100755 --- a/Tools/check_tools.sh +++ b/Tools/check_tools.sh @@ -18,7 +18,7 @@ check_installed() { cd $(dirname $0)/.. #autoconf pkg-config java ant yasm nasm wget -for prog in autoconf automake pkg-config doxygen antlr3 java nasm gettext wget yasm optipng; do +for prog in autoconf automake pkg-config doxygen java nasm gettext wget yasm optipng; do check_installed "$prog" "it" done From 2be1b5e6c19828661ec0fbef6127c7bfa682c1fb Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Fri, 20 Feb 2015 18:24:45 +0100 Subject: [PATCH 13/48] enable SRTP DTLS [Switch submodule branch] for polarssl --- Classes/LinphoneCoreSettingsStore.m | 5 ++++- Classes/LinphoneManager.m | 3 ++- Classes/SettingsViewController.m | 8 ++++++++ Settings/InAppSettings.bundle/Network.plist | 2 ++ submodules/belle-sip | 2 +- submodules/build/builder-iphone-os.mk | 4 +++- submodules/externals/polarssl | 2 +- submodules/linphone | 2 +- submodules/msopenh264 | 2 +- 9 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Classes/LinphoneCoreSettingsStore.m b/Classes/LinphoneCoreSettingsStore.m index d37f40c4a..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"]; } @@ -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.m b/Classes/LinphoneManager.m index 994127187..11fbe85c7 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -1477,7 +1477,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 */ diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index 733df0327..909a8fb39 100644 --- a/Classes/SettingsViewController.m +++ b/Classes/SettingsViewController.m @@ -564,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]; } 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/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/builder-iphone-os.mk b/submodules/build/builder-iphone-os.mk index f5a092f6f..879da6690 100644 --- a/submodules/build/builder-iphone-os.mk +++ b/submodules/build/builder-iphone-os.mk @@ -38,7 +38,9 @@ linphone_configure_controls = \ --disable-x11 \ --disable-tutorials \ --disable-tools \ - --enable-msg-storage=yes + --enable-msg-storage=yes \ + --with-polarssl=$(prefix) \ + --enable-dtls #path 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/linphone b/submodules/linphone index 229f662b9..ea0aecc8a 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 229f662b9f0404d2f5f6acf8fc572e9e4315cb08 +Subproject commit ea0aecc8a7cabf3bf7da1cd92039c4e8259bf02f 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 From ab5742654e0aa6c4f5257af87f1c68470ac51c43 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 23 Feb 2015 15:45:36 +0100 Subject: [PATCH 14/48] polarssl: export variables correctly to build correct host --- submodules/build/builders.d/polarssl.mk | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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 From 8a860df7d8e60bf15463db24dc83888cd44f2048 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 23 Feb 2015 17:46:48 +0100 Subject: [PATCH 15/48] i18n: update localization and add Makefile targets pull-transifex and push-transifex --- .tx/config | 1 - .../Base.lproj/ChatRoomViewController.strings | Bin 3170 -> 3404 bytes .../HistoryDetailsViewController.strings | Bin 4890 -> 4874 bytes .../IncomingCallViewController.strings | Bin 1602 -> 1586 bytes .../IncomingCallViewController~ipad.strings | Bin 3218 -> 3186 bytes Classes/Base.lproj/WizardViews.strings | Bin 18186 -> 19026 bytes .../LinphoneUI/Base.lproj/UICallCell.strings | Bin 9720 -> 9704 bytes .../Base.lproj/UIChatRoomCell.strings | Bin 1046 -> 1822 bytes .../Base.lproj/UIContactDetailsHeader.strings | Bin 692 -> 676 bytes .../LinphoneUI/ar.lproj/UICallCell.strings | Bin 9680 -> 9672 bytes .../ar.lproj/UIChatRoomCell.strings | Bin 1018 -> 1794 bytes .../ar.lproj/UIContactDetailsHeader.strings | Bin 704 -> 696 bytes .../LinphoneUI/de.lproj/UICallCell.strings | Bin 9788 -> 9780 bytes .../de.lproj/UIChatRoomCell.strings | Bin 1060 -> 1836 bytes .../de.lproj/UIContactDetailsHeader.strings | Bin 700 -> 692 bytes .../LinphoneUI/fr.lproj/UICallCell.strings | Bin 9870 -> 9862 bytes .../fr.lproj/UIChatRoomCell.strings | Bin 1054 -> 1836 bytes .../fr.lproj/UIContactDetailsHeader.strings | Bin 694 -> 686 bytes .../LinphoneUI/ja.lproj/UICallCell.strings | Bin 9260 -> 9252 bytes .../ja.lproj/UIChatRoomCell.strings | Bin 904 -> 1680 bytes .../ja.lproj/UIContactDetailsHeader.strings | Bin 652 -> 644 bytes .../LinphoneUI/ru.lproj/UICallCell.strings | Bin 9824 -> 9816 bytes .../ru.lproj/UIContactDetailsHeader.strings | Bin 686 -> 678 bytes .../LinphoneUI/zh_TW.lproj/UICallBar.strings | Bin 0 -> 9830 bytes .../zh_TW.lproj/UICallBar~ipad.strings | Bin 0 -> 7650 bytes .../LinphoneUI/zh_TW.lproj/UICallCell.strings | Bin 0 -> 9676 bytes .../LinphoneUI/zh_TW.lproj/UIChatCell.strings | Bin 0 -> 1508 bytes .../UIContactDetailsHeader.strings | Bin 0 -> 640 bytes .../ar.lproj/ChatRoomViewController.strings | Bin 3164 -> 3406 bytes .../HistoryDetailsViewController.strings | Bin 5006 -> 4998 bytes .../IncomingCallViewController.strings | Bin 1604 -> 1596 bytes .../IncomingCallViewController~ipad.strings | Bin 3222 -> 3206 bytes Classes/ar.lproj/WizardViews.strings | Bin 18012 -> 18852 bytes .../de.lproj/ChatRoomViewController.strings | Bin 3218 -> 3460 bytes .../HistoryDetailsViewController.strings | Bin 4942 -> 4934 bytes .../IncomingCallViewController.strings | Bin 1632 -> 1624 bytes .../IncomingCallViewController~ipad.strings | Bin 3278 -> 3262 bytes Classes/de.lproj/WizardViews.strings | Bin 18390 -> 19230 bytes .../fr.lproj/ChatRoomViewController.strings | Bin 3244 -> 3486 bytes .../HistoryDetailsViewController.strings | Bin 4960 -> 4952 bytes .../IncomingCallViewController.strings | Bin 1608 -> 1600 bytes .../IncomingCallViewController~ipad.strings | Bin 3230 -> 3214 bytes Classes/fr.lproj/WizardViews.strings | Bin 19174 -> 20014 bytes .../ja.lproj/ChatRoomViewController.strings | Bin 3060 -> 3302 bytes .../HistoryDetailsViewController.strings | Bin 4714 -> 4706 bytes .../IncomingCallViewController.strings | Bin 1508 -> 1500 bytes .../IncomingCallViewController~ipad.strings | Bin 3030 -> 3014 bytes Classes/ja.lproj/WizardViews.strings | Bin 17102 -> 17942 bytes .../ru.lproj/ChatRoomViewController.strings | Bin 3224 -> 3466 bytes .../HistoryDetailsViewController.strings | Bin 4948 -> 4940 bytes .../IncomingCallViewController.strings | Bin 1610 -> 1602 bytes .../IncomingCallViewController~ipad.strings | Bin 3238 -> 3222 bytes Classes/ru.lproj/WizardViews.strings | Bin 18604 -> 19444 bytes .../zh_TW.lproj/AboutViewController.strings | Bin 0 -> 1402 bytes .../ChatRoomViewController.strings | Bin 0 -> 3250 bytes .../zh_TW.lproj/ChatViewController.strings | Bin 0 -> 1474 bytes .../ContactDetailsLabelViewController.strings | Bin 0 -> 394 bytes .../ContactDetailsViewController.strings | Bin 0 -> 1380 bytes .../ContactsViewController.strings | Bin 0 -> 1732 bytes .../zh_TW.lproj/DialerViewController.strings | Bin 0 -> 4462 bytes .../DialerViewController~ipad.strings | Bin 0 -> 4684 bytes .../HistoryDetailsViewController.strings | Bin 0 -> 4830 bytes .../zh_TW.lproj/HistoryViewController.strings | Bin 0 -> 1942 bytes .../zh_TW.lproj/ImageViewController.strings | Bin 0 -> 394 bytes .../IncomingCallViewController.strings | Bin 0 -> 1558 bytes .../IncomingCallViewController~ipad.strings | Bin 0 -> 3130 bytes .../zh_TW.lproj/WizardViewController.strings | Bin 0 -> 1226 bytes .../WizardViewController~ipad.strings | Bin 0 -> 2474 bytes Resources/ar.lproj/Localizable.strings | Bin 26286 -> 27764 bytes Resources/de.lproj/Localizable.strings | Bin 27138 -> 28664 bytes Resources/en.lproj/Localizable.strings | 15 ++++++++ Resources/fr.lproj/Localizable.strings | Bin 28014 -> 29550 bytes Resources/ja.lproj/Localizable.strings | Bin 23684 -> 25164 bytes Resources/ru.lproj/Localizable.strings | Bin 27460 -> 28872 bytes Resources/zh_TW.lproj/Localizable.strings | Bin 0 -> 28284 bytes Tools/generate_strings_files.sh | 33 ++++++++-------- Tools/update_localization.sh | 36 ------------------ submodules/build/Makefile | 9 ++++- 78 files changed, 40 insertions(+), 54 deletions(-) create mode 100644 Classes/LinphoneUI/zh_TW.lproj/UICallBar.strings create mode 100644 Classes/LinphoneUI/zh_TW.lproj/UICallBar~ipad.strings create mode 100644 Classes/LinphoneUI/zh_TW.lproj/UICallCell.strings create mode 100644 Classes/LinphoneUI/zh_TW.lproj/UIChatCell.strings create mode 100644 Classes/LinphoneUI/zh_TW.lproj/UIContactDetailsHeader.strings create mode 100644 Classes/zh_TW.lproj/AboutViewController.strings create mode 100644 Classes/zh_TW.lproj/ChatRoomViewController.strings create mode 100644 Classes/zh_TW.lproj/ChatViewController.strings create mode 100644 Classes/zh_TW.lproj/ContactDetailsLabelViewController.strings create mode 100644 Classes/zh_TW.lproj/ContactDetailsViewController.strings create mode 100644 Classes/zh_TW.lproj/ContactsViewController.strings create mode 100644 Classes/zh_TW.lproj/DialerViewController.strings create mode 100644 Classes/zh_TW.lproj/DialerViewController~ipad.strings create mode 100644 Classes/zh_TW.lproj/HistoryDetailsViewController.strings create mode 100644 Classes/zh_TW.lproj/HistoryViewController.strings create mode 100644 Classes/zh_TW.lproj/ImageViewController.strings create mode 100644 Classes/zh_TW.lproj/IncomingCallViewController.strings create mode 100644 Classes/zh_TW.lproj/IncomingCallViewController~ipad.strings create mode 100644 Classes/zh_TW.lproj/WizardViewController.strings create mode 100644 Classes/zh_TW.lproj/WizardViewController~ipad.strings create mode 100644 Resources/zh_TW.lproj/Localizable.strings delete mode 100755 Tools/update_localization.sh 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 a05025f33ee82f42a6a06dc657c8b10c2eb4ccb3..e43729de39194c1af3e534c8dea8c5a13becefd6 100644 GIT binary patch delta 124 zcmaDPaYkyx8`jAmSZg*Hu$eGUUcuflS%<@Hatynbq%T7%LopC0GNc1p3JhrsnLs*+ wA!V{5qrA8ogE4~=gEdfGi$R}(3&;kE=uO_psygui7aq+Ine#WV;Mm0s00^)iqW}N^ delta 49 wcmX>j^+;mF8&+m@hT_SuS!+S`=5#hwMzFwa_C_!*&0#*dk4b2A9OpY`0Fy!wF8}}l diff --git a/Classes/Base.lproj/HistoryDetailsViewController.strings b/Classes/Base.lproj/HistoryDetailsViewController.strings index 2954ead489ee4aa27607a6d5028682120087cba7..9ea355e8d1c0005c407c298e9a50ed8d428f972d 100644 GIT binary patch delta 24 ecmbQG)}^+AjcGC$Q^VvwAQob-**uB4gC786p9k&$ delta 54 zcmeBDo29majfq*Ep?ESYQzMveWoqOF@);Bu@)!~sav4%58#2mI)?*F<$!>0B?&Jpm DWNHlQ diff --git a/Classes/Base.lproj/IncomingCallViewController.strings b/Classes/Base.lproj/IncomingCallViewController.strings index c3aa723a591721b5bfd84e57dfd67add14db8b2c..1ea6da90513021e0d690d8114fec3b5541babb0a 100644 GIT binary patch delta 25 hcmX@avx#Se9@Atari#t$m@F74zhZ9KoX2v75de492|@q> delta 41 ocmdnQbBJey9uu=VL-Ax?rb-aKc`1`6BUs=rb0b(FmgOoV0PiCUjsO4v diff --git a/Classes/Base.lproj/IncomingCallViewController~ipad.strings b/Classes/Base.lproj/IncomingCallViewController~ipad.strings index db1fb0f94c984acf751fc43d97520878596fb000..c82d0111afe9eb3601bafceda5d6f9f9dde1475e 100644 GIT binary patch delta 70 zcmbOv`AK4f9@Atari#t$m@F74zhZ9KoX2v46)2)H*^XOcaut`&IAM7_1q%7yw-26(#@x delta 98 zcmew)F-dZR9uu=VL-Ax?rb;lqkgIjF7V{P``z~`Mh~6B_a*`FQNOQ6uR|r^eA(t&9 dL=|_V1W*-&0z)E084#BMaS?+OgEa#e0{~Dp7^46H diff --git a/Classes/Base.lproj/WizardViews.strings b/Classes/Base.lproj/WizardViews.strings index 1f22b04231e9ccd41058d06ec7a9c1d1c946ba69..8083292b396d888d2374ffa4feafa3a890a2441f 100644 GIT binary patch delta 710 zcmeC`W4ttlaRZ;_WHT$i$$fSblVhyHCU;rt!TCR|G$ub_7n;0*O>VQ9)jOulV1`tN zbcS3Yna5B9BvTli8S=sGA|Rc^pu}L!puphAP{dHipvw@<;0q*kfMgnj9z!vT-VlaN zpb0rZv0{d31_Opzpgvn5R$>TcaA63TxKKVFn=udzv>5amxPVHrsUU2T5~@{`4=QNV z%wvW~9t!~m7R@{cvIyZZuvIkmm=TJ{d>Ddh6=NWakUa*p3gofL0?rDXU2KnW0su03 Bha3O^ delta 59 zcmV-B0L1^&lmUv40k94^lO6~}lX^NhlZrVmlRgFzlP(Avlkf>7li&vulduLJlejq! Rli)fWvtT;J0<&yD<_UD|6`=qC diff --git a/Classes/LinphoneUI/Base.lproj/UICallCell.strings b/Classes/LinphoneUI/Base.lproj/UICallCell.strings index 92138347cec661b0842f5eccb3fd0e02751f5ea1..9d95512170df08bb68401dea489da152d00fde17 100644 GIT binary patch delta 22 ecmez2{la@f-o&Dsjh_xMPu|ATu-S@rp8^1j?h5w+ delta 38 ncmaFi{lj}g9WANvJXQyjf2W___ijp{X zV*A;Szdk)2qYZ-rB3LXr46Zp_7@?1QT~|msUJ#ReMVZBvBhcF+CJ6a9uJdtwR?)c)Frz!7@Fw9?`;yk<2rjH(J;rNZLw{k6Y_C0E@i$HFp*`C%B*vw|2M-B~g+aLSO1yjkbeM39WE^jhomi5H+{f1lx!?aoKoa4g;(+ zFZRjtE#FDyI6a0`s_0jw>QMJ~Q1|xEah?4pap>ewatH8gm!j5@zA})b*RaBJXt;o1h$Lm3w%u2bgPa4Ys3RjrnW`vvBtP%T=}y zM_>NUV;^sn delta 23 ccmX@%eZhM|9G02w-D#{d8T delta 19 bcmZqT`^7#%WwILMo5@nlKQ;@neqsawN<0To diff --git a/Classes/LinphoneUI/ar.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/ar.lproj/UIContactDetailsHeader.strings index 17004dd72fe4f06966e8b44bdc3be1a50056fa95..bd8aa1e2b69fcb80d7bb0125d405124dbcba40ca 100644 GIT binary patch delta 14 WcmX@Wx`TB>-o~O$jFUB(W&i*!TLr8D delta 22 bcmdnNdVqC89_Cf??c}|?veM?i zgXJ~^)>*}fmCG-pT_Sa4r`U*lk5iOT(hbpPVc(u@&w7n)#mNG0^0m%L7PDY6Cjf zgz{kQm|cbaMCPc$5BAvo!hep$hv}z@s7YAElMT&J#~MRZzTqojuAn9!zXh5A delta 22 bcmdnOx`%Z_9j39clB-3mFQz!<= diff --git a/Classes/LinphoneUI/fr.lproj/UICallCell.strings b/Classes/LinphoneUI/fr.lproj/UICallCell.strings index dd352ca36aacab6f540c5e99dff8cf39c943d415..94dbc6b1388a544ae010f401e5589d467962c402 100644 GIT binary patch delta 15 WcmeD4ZS$Rwx3S2DW%DkUD~bR$b_RX` delta 23 ccmZqk?em?G$E?m!yfN361w?P&$Z}N?09_detN;K2 diff --git a/Classes/LinphoneUI/fr.lproj/UIChatRoomCell.strings b/Classes/LinphoneUI/fr.lproj/UIChatRoomCell.strings index a54d1be298723b95d5b08f30a1996a32e6a3f6df..35daf8f290e99a2d0bcd4bde773dedd67db699c1 100644 GIT binary patch literal 1836 zcmds1!A`P~Y1YYD=YsquI2b z&g{<2n|ZU}Ulxu~hm9@*xOnBVamlBKK03HF?>Qo_XUwQ=)8=Bt<(b_+hVXgT=Z+6t z(Ke(dSbOQ2KaWso z6*5Cb4-2!f=)bHEDYiIoA$n)dt9l*doIc`rgI`Iim3BzJFz@Y{8))P(OXHa8DOQTB zINIk%tSZR*tW4aIdsfNABFSNwK40^k*c1D)DMbeRoKhL))&}O*9(_*Z74fV}9XjMn zmgzIHJ~Y({Ffbesh;!BP9<2*bMZm9%G4c}t%wd+sp|7HNY1ao>GTM@}GGUz1 zOpzEJ;2;;f3f@7&;QhPaHF=2P+5T_u_~{0EX?C6LY(zV$iDsnDX)d4VV)Xf`9uT3& zo6TmYC+v>mxa^b7+WUAjY|ss3Qxg9@+9Fz9a|h~P)O{FICm*^+Z9YRvE^YGT@`>-y zh+nZwIZWwOTu_&FQj_&Sz5E>Ve@t1?!X$?oW!=HbHfBUNa?Gr(AE#t8|LW7KM!$La I->YQd2WFijUjP6A delta 20 ccmZ3(H;-e2%48kJTbucq*%&tqu}U!k07T9OU;qFB diff --git a/Classes/LinphoneUI/fr.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/fr.lproj/UIContactDetailsHeader.strings index b85ee2376a04ef80b275c0b41c6432833495de75..6c1d420707c6c4b470083294925f552a88fa724d 100644 GIT binary patch delta 14 WcmdnSx{h^1-o~P3jFV-UW&r>z?FE7W delta 22 bcmZ3-x{Y;09sJ6&yNL3vSU3$8$I*m1F%VNL7R0hZKc+><8+x zt~rj1-$@=))LP|bRD8u`$D^#NZx1*_&eO2g@FG0Snzo^L8<}j6d4xt9()S#8beOXE82lx{0w5f4fznG65OE-S$eJ9wi0;!8rfFScR%rnSNIoC zVUC(L*tfaHWv2Pm&c#uQFE@%yb-vlU<}E(sUGANKSysCxemWcW>pbn;7YjVcr@YQR X?6T%dJ~y^=bF#quoZ_p%Zfp4y%7hlE delta 19 bcmbQh+rd6TWwILMoylCxpEmzunZ^hJMN0=! diff --git a/Classes/LinphoneUI/ja.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/ja.lproj/UIContactDetailsHeader.strings index bd3e929d91ac563bf0d95738a17d7e28105ebb54..101df13383844ad82e0686c1a0dff69f1fda2f98 100644 GIT binary patch delta 14 VcmeBSZDE~|x3Q>?aWV^22LL9&1nd9+ delta 22 bcmZo+?O~me$E?m!yfL?*5kyb^&DaS5Os)qR diff --git a/Classes/LinphoneUI/ru.lproj/UICallCell.strings b/Classes/LinphoneUI/ru.lproj/UICallCell.strings index 6fff0fad064b2459b513922d6c0ca34cc083a904..8dad3a8a4e62b14356ea287996b329c5cec006b3 100644 GIT binary patch delta 15 XcmaFhbHiss-o~O3md&SFrYQmdK8Obb delta 23 ccmccN^T2099nQcnWUr)3+N%_ouHgNW8g(QVzuuu& zGn}K>MX!d!tD)JeP_2$mA4T>lRLFUx^XR>MkHY@z2rT}bpg-prGs^yqgg+y*KcQM3 zoj!u>PpFXdN9WOd_x^;#o*7 z)(E)HJ3QV<XDuIloQ0*uk@C?NN)B$*HvWiTB(z&5oeiG1EAe_B2Ou z(XYQ!Hs8UnpxQN4g=+2TIO|J$#dFiwUiRwCskEozsv}Jk*IXUgt1hR~o`&BwO~bt2 z8+)DQRNB+dy2`1vr{T4pq8W?IgIcT++o`mt;oT)o6K4_QiY&sZw5Q?y zKTX3=@Jt(5WC*U0_B1^5X&QFV)7WzZr_!G0CDt0}eI`pM7Ry5RI)OOCQHymIX_|GU zdTqd!ho+ORKT>SEhOa*~l{y+r6>^Lf2%T%*f~!8L7Fox^sfdHrVs$XDUPrHwGkX~; z=4*}=rLN(<)Kpr~$aA0cyc}X==M0`Bifh|O|FzRb&m(nO(8yEAJPk+Ce`%-&F40Jx z7Bt~`Po5;+x5yW&ZA&DfMhlAYR3uLk?^i@YJ64Gz)M!DW#nv3l2&)Gd8T{O$wla&R z)PhKhFnOYQ$E6uYdv3`cO{tE^vM(KCM56B>OXpxi{LYXo5bqVWS@)t)v5rt5OWu1z zg`8VyCSAct>QJMO!s3&RrFkwn3%iQUPpa0D>Z8eiNtHS_UB!DQb?Rs=z8&JqqEqGt ze8bP1LcUI`EUw~Rn|+l@-8x!*RN1@#$EWLf_cWzCB8z`}SYxfwIr{&MYy7+@IyhG1 zB(+%`)RpUq^|56Sb*0=IOf%|A-bG!j1yvZKb2Jn2?Z6OY)6 pIF?`f&VUW#dms#a}%6d?q|8IufE^?^BQNr;QSOnOZ66awxUn8rEf{HUO?7UlQs3q6OQ1}nAZ62!Y$+dNBFkJ zXH|P|BO&f*6;M}d>O=0K{FC^A=deYr&y!B~1LnS(*;gx1cZ~>s#OgH;Z<2(AfN-ED z3>EVzSGeajeT6$qx~cQe5*~5(3RSukk5-vWR&ezH|qHm~0>!BY*xp0*ya+@MneH@-&=z z<23A^qtREQR;4`6d7`qZh~0BE`pU+tl&9g{B<>Bn=V6r9&fmJC_GosIU*IOt1WBs5$FeBO>)mJM|_X-vEtnQ4N?!z*X zFZ!qvY`n5_W<<*vN9_C=P zQtFewQfgPvqnDpEd)ZWM&zgp*8K;I))^J`*DkW&bep_2yHnU})Otwt1gc>DC{CCbc z#URLzW+YAF&tHPT?`pIWG;`me&V4B#{Q2_;;=Mp#ADSNBAXpt{&Z=H;J@6#A9q2tP(SlUL}%B316iA*hbS_F~fsajHJ?`zw5_wf&c&j literal 0 HcmV?d00001 diff --git a/Classes/LinphoneUI/zh_TW.lproj/UICallCell.strings b/Classes/LinphoneUI/zh_TW.lproj/UICallCell.strings new file mode 100644 index 0000000000000000000000000000000000000000..7fb608a6dce522cd055e96fcfc5eba2c7f727099 GIT binary patch literal 9676 zcmds7TTc^F5T556Uwv+PB;nEv$YOkuLI|QrKs5MPp+O9^3gse+iNA{~?0pneTi%v*pk41})GmHK|8u)Tc|ln)DLK3~kXG9pL>9)<4q#=V#~z z&h+UBuR(h4DbAeY%qflO$JCW#qemke;v9cxjPDNd=^Wq9EWN|Gzv3@Gw?*p{&ni@jodHTL}$KD!vg(4jzw%auBEF+7EW0Bf8IykyGmLide zWfg6iZJ)TekkdY$AleV8#DH!dq6({2A9XxK_Ab+UafGfatvp8q+7Ja%- zE7V7&?Dc7rULRhGQ;a9O_dCx%ZeIAR#u}J3#!Im%WZ!K-VZH(7kd7S~JEZS7UJ1ph z`}3)7HH5oBcLh~(=}EVs`n(c~FYoQ&quT?nbJYIY1E0>(ZUjele?ADS=;SNZ?l{%R zChpTCeCGSLeK)R5lt}Ijyb@Z;a?dfCMdL&>_tVa1I}(XlQ;Iolua5Y*bINkP>Wopk z5S8sEWV;xnZZjs%5N(^T;1yKv44C>r)kNQyDc%j3b&N>AI4~yYwKC2LMqa7HD4%#@ z@*`Onp0$B?8=dq56wtnF$}oyW#Wme#9dRBw>f>Tzg5FrKP|L_dKTmaFS_j{5aA&pg z&W)>6z|}G0^7j^lEo9&E6u{as0{47)-lVcgEGZ~CuY~Tq(0F3(q*~Xg7(XZRpRtodPs}S-suvntOy2a`4v`0b z`osBT)@D=P02<}0wf-C^LofCfKkXjsz~IW8`#z#iZ%I166|wkvioq1Z=V{Fj(HmAr zy%WgRLRo8%AO^qWTK25+VCSI?lh{;T%v-G^PQ7n0zh85tx;|!WCWX}P#>5)SDb_}x zS(2k));h3ktqPy=-eYh}-Gxij^PjywWoX2rV$!tDI%4$eyzSBJip;g(J5n)vKW{O( zVmVi>7iOfohG%P4nCKHzOpc@;!cTo>v{$(dr&v`S)$PW_8d6Wy)it3X?)lEG?D|tV zu4(wQ>;;>YA;JvWBmGP*V$#-rMEPP=S(fUAJO4t_7e>%k)weDXN)n1nDYC@{TY_D$LP~yFy~m7z8NhUEg1^@-Fa$^6bI~S zlQRX+?z!6Wtc~=;(;NPYZH&<^^9MRtk0z^&xR#xkQ|9;<D+e}`8XJi>8}*DK81>dvUlTHrm729*L-s{qqT_e4 zX`YH5w@faWhB#40McEnt9W^4lEvHoYTzOq~jrGtjk{#bJdd%m7@SPW9%8ts3&0taE oQr?df`IXlwe}TS-N7c%XFM7XfLheSDri$(c;?g*kVr`@d{|)lr82|tP literal 0 HcmV?d00001 diff --git a/Classes/LinphoneUI/zh_TW.lproj/UIContactDetailsHeader.strings b/Classes/LinphoneUI/zh_TW.lproj/UIContactDetailsHeader.strings new file mode 100644 index 0000000000000000000000000000000000000000..20b1a62e904534e4890b7ec8be22898b7ff1cc22 GIT binary patch literal 640 zcmezWkBdQ{L5o3w!I>e4A(5dN2o)G?fmn&blfj806iE62#giCPf$~ZW)j%47m%G8sx3Dv?ye%y4GNXUGG}f%KFB_2vOtxj?-Tll+0Yvw%F1oF{_|+-3`? zycW=HTtK!3gC0?~D#1<2Z%C}&<;NRhSOv0)3kXT|WeLz-6<{|*LIc$&hGh5vW+J*P zA!ZTdMkj_+po>btVM=*iBr=o%LlqP^MFf0f#9)LLBOnp-;)FY3m!DX;dl4jF07^z? Anbw^?Y6C1NSL-A%twu6iy#^i(SyC?n=nyklSvUv~ZBxV5CD+~w# diff --git a/Classes/ar.lproj/HistoryDetailsViewController.strings b/Classes/ar.lproj/HistoryDetailsViewController.strings index ef989cd9311c891341026d22cfc65f1cfaefd078..1398242f777b3678caa1cf56822871473ba91d41 100644 GIT binary patch delta 17 YcmeBEZ&TmE$Fy09iG^{q6my9H04!4kLjV8( delta 25 dcmZou?^EBv$Hc78P`sI!iIow|5M(YD002$G1#tiX diff --git a/Classes/ar.lproj/IncomingCallViewController.strings b/Classes/ar.lproj/IncomingCallViewController.strings index 07226ba9dc2061f08a4fa8af5d50e472c1999f04..d90c464f629fab2bba30cf5e22a8684861f42eab 100644 GIT binary patch delta 17 ZcmX@YvxjGc64PcirfrOyA26pd0RTBw1^WO1 delta 25 dcmdnPbA)Gu5)-pJL-A%srtOSi#&zaYCIDb82Ppsm diff --git a/Classes/ar.lproj/IncomingCallViewController~ipad.strings b/Classes/ar.lproj/IncomingCallViewController~ipad.strings index 755032cabb48f66c974213620b00fa5924060e2d..123065a5dc3b3aa12305bc6d8b4e6f75db84da43 100644 GIT binary patch delta 34 qcmbOx*(SL`iD|M8m&Rs4ras2a511p^HrsIRW1ReeS!c2qPYwXY5eqp0 delta 50 ucmZpZoF=(JiHTXAp?I?*({@G>WAa;W-OVg4I&5H$B9rFk2(D=`nVA4gAPso{ diff --git a/Classes/ar.lproj/WizardViews.strings b/Classes/ar.lproj/WizardViews.strings index 5077a9fc87c17a9cf91b309b101be1d9744f6e97..743a14dfdc39eeb2febc15e969fa73f297cc3776 100644 GIT binary patch delta 686 zcmcc9!?KI_At^hE#@hhFl<-$4~+!Qy82X z^1k2{}NqVuol21BO_j zK3gDGVhCk$VF;MGP(B@-F%S#181xyqfJ(8cAZ(Ems#TL2Su|5qj+b+h*$JqBwu41>6^kqn8C+GR#H-05it~g8%>k delta 39 tcmX@6c1~>r9}}}WL-A%_CU!<%AcH}HA&()EA(tU_vLLtoW*cTM0RXw82uc6| diff --git a/Classes/de.lproj/IncomingCallViewController.strings b/Classes/de.lproj/IncomingCallViewController.strings index 6c230b92f52fd6f71d293785194850214fdcdba7..6d9f4da8156c46c1dcb03e37c9c3df1494f66c4d 100644 GIT binary patch delta 17 ZcmaFBbAxAt3Daf^rd^DizcFVq0RTSF26q4e delta 39 ucmcb?^MGfA2@|h6LotH_LmopSLoP$=o8K~LGXVh6RSI+f diff --git a/Classes/de.lproj/IncomingCallViewController~ipad.strings b/Classes/de.lproj/IncomingCallViewController~ipad.strings index 2af2d6c374f0dcaa79548906d383429e4fdcaf82..951ad9721d11678f7a24bf67a9d20b11149fabd1 100644 GIT binary patch delta 34 qcmX>nxleL~3De{}E{)9zOp_Qle`79T+nmRBh;i~aW}V3iJb3`(Qw+HP delta 50 ycmdldc}{YJ2@|tAL-FK9F3rs`Op_QvoXu~UOWDATM6SbNk;!kFbteb#-sS+SD(1{!hE#@hhFl<-$4~+! zQy82X^1k2{}NqVuol2 z1BO_jK3gDGVhCk$VF;MGP(B@-F%S#181xyqfJ(8cAZ(Ems#TL4Wi)B#F+(Jeg#ZJK lW*!4sgzy;HDw=xC2*qPQ48gRDF_1;b9s^pnd7-T-7XWsFeHj1% delta 43 zcmbO?jqzGPiM7ig|K?roiMJNrBBqj&C>tR+tX0 diff --git a/Classes/fr.lproj/ChatRoomViewController.strings b/Classes/fr.lproj/ChatRoomViewController.strings index 96b177a8b7df1fc598f1ca6983f2429cc4b4d344..852063d13c52b3841aec01bd9678ab257f5097c1 100644 GIT binary patch delta 110 zcmZ1@IZt{62is;Iwk?d4kFf8VJb}|n(w8BXp%@4g8Pb6)1%@<+Ody@ZkTRK(NnYHH z!I(jb!5S#8#h}l?1!RLn^d?W_P@Q;yOW2tq1E?{Vp#Z2L7h=%lKu-P54IDZw0GcWo A4gdfE delta 36 qcmbOyy+(2a2OG0GL-A&IwylgH#^l}Xdnf)AntYB?XY&Tmcgz6Jlnjdi diff --git a/Classes/fr.lproj/HistoryDetailsViewController.strings b/Classes/fr.lproj/HistoryDetailsViewController.strings index 517667cf5ca6157513d45d9ba9443e7112df38dc..d1a6c5589e0dcb8ab2e5c9e37305ec5cdd7d3e9c 100644 GIT binary patch delta 17 YcmaE$c0+9gAJb+bCN{>+GR!Ul05&TGxc~qF delta 39 tcmcbi_CRd|9}}}WL-A%_CU!<%AcH}HA&()EA(tU_@<(?0%{I(30szJW30wdG diff --git a/Classes/fr.lproj/IncomingCallViewController.strings b/Classes/fr.lproj/IncomingCallViewController.strings index 2559620d9933d0feb34748e814085741597b024d..fd68b1fc59d8415d9ce7441c02a9d1bdf185c134 100644 GIT binary patch delta 17 ZcmX@XbAV@q5z}TfrY(${-!Vrq0RTHY1|25yA&()EA(tU_vLKKA<~XJv#?9}TgV@l-bGW83PJYL%GuePA4*X delta 50 xcmeB^oF}=#h>2O9p?I?)(^f_><0*468;CL4kV$iM0@oC<=;Wu&x|0=n@&H{r4ZQ#W diff --git a/Classes/fr.lproj/WizardViews.strings b/Classes/fr.lproj/WizardViews.strings index 8759e50715993da9df6adc95abea16a5aff4f8d4..a8665594ec438d6c349ac755fc6587fb16a36e51 100644 GIT binary patch delta 682 zcmaDhm2ur1#tlg}le=vBCd)ZWOx|D{w)vjT5$4QbhE#@hhFl<-$4~+!Qy82X^1k2{}NqVuol21BO_jK3gDG zVhCk$VF;MGP(B@-F%S#181xyqfJ(8cAZ(Ems#TL2MKo#VF+(Jeg#ZJKW*!4sgzy;H hDw=xC2*qPQ48gRDF_1;b9s^o6*-_7P^C1TnE&yzIe1HG| delta 31 ncmZ2Chw<4|#tlg}ljAsCCZDsl*nH3C2=n9wZ-vcVE-G9A*_sSW diff --git a/Classes/ja.lproj/ChatRoomViewController.strings b/Classes/ja.lproj/ChatRoomViewController.strings index 90a808097078932888cf3dd739acf9e9f92941f5..221a03340261d4162d4b3cb70ddb3799490d800b 100644 GIT binary patch delta 120 zcmew&{!DVi71qr+Sm!WKu3%p^S&q|6(w8BXp%@4g8Pb6)1%@<+Ody@ZkTUrrqrA8o ugE4~=gEdfGi$R}(3&;kE=uM92Qk{5!OA4oEhKc8_CMR&|Y);^q!VCaw933M7 delta 47 zcmaDR`9*xg6;@t#hGGTrX`GrX`G%{kU~De_>w6I$429WAic27LZ5>0M$kd*Z=?k delta 54 zcmX>meocIX3=^|DL-FK^oSKt)m_;^6Fl8`;1UBzyzRU_{Oypb(7MZ-CS$A?4cMJfp C@(;ZL diff --git a/Classes/ja.lproj/WizardViews.strings b/Classes/ja.lproj/WizardViews.strings index a4885952537d5a86d249e69ac668e9f6fb415622..eb781b5ef3c2d9d055d556011caa69459b3ee9c7 100644 GIT binary patch delta 691 zcmX@t$~diualS859`&7>XFm7<3te8GM0c4v40~b&!HWh>|QbM(gVe$fI4VwAP5XomDz|f+Z&p;L- pd diff --git a/Classes/ru.lproj/ChatRoomViewController.strings b/Classes/ru.lproj/ChatRoomViewController.strings index 22c8280844693d73f6aa7a16e810da73458c3da2..48cf472e0d6e060342c718f1e004bed871d8fa6e 100644 GIT binary patch delta 130 zcmbOs*(JR}fsIpvA&()EA(tU_G9$bB<`lL9#>qF>cT8TyX(j2)kjhXDgozC4K$ZeS z8bc}wCMHI91%^C^M26hSiLA<-?U=;`0C)@s2mk;8 delta 25 dcmX@3c13Li7ZbBOL-A%#CT2!3gPYk=003E<1-AeI diff --git a/Classes/ru.lproj/IncomingCallViewController.strings b/Classes/ru.lproj/IncomingCallViewController.strings index 23908fb3e7589ca5f8ffed9c957e40f0d30e61dd..c13b8471042fb2c32146c2bf4ac81ad18665fcec 100644 GIT binary patch delta 17 ZcmX@bbBJey3Daf^rVWgn-!R890RTIR1}gvn delta 39 tcmX@abBbq!2@|h6LotH_LmopSLoP$=WI<-*%>_&)jLbmc&5xPmnE=OA3H|^8 diff --git a/Classes/ru.lproj/IncomingCallViewController~ipad.strings b/Classes/ru.lproj/IncomingCallViewController~ipad.strings index 879a6f1ddd326bd2ce35389648ee2d5dd731b76e..8aaca960694a86d22adf5d19fc5a6aa5c45b46b4 100644 GIT binary patch delta 34 ocmZ1`IZbkd3Daf^rVWgf1$cBeOR!k5O}1dt*j&Rk0VFaF0JJd)-v9sr delta 60 zcmbOxxlD3{2@|h6LotH_LmopSLoP$=WI<-*%>_&)jLbmc$^W@^Hw&;>uz@(6-MMzc HM5hA)#4``c diff --git a/Classes/ru.lproj/WizardViews.strings b/Classes/ru.lproj/WizardViews.strings index 903b5365b8dc07e73a97db01fdd7e98a8a172712..8d2de1a4737109bbf9c3184d023d319ba36534a9 100644 GIT binary patch delta 686 zcmZ28k@3rP#tkJ_lPzrcCac*?Og>~Cw)unAF6PW&hE#@hhFl<-$4~+!Qy82X^1k2{}NqVuol21BO_jK3gDG zVhCk$VF;MGP(B@-F%S#181xyqfJ(8cAZ(Ems#TK@vTM@JV}?i`3jqce%{&IO2;niX kRW$XO5sJrr7=mdPV<3x=JqEN2p5R)7V5VI0O;t73u B5O)9o diff --git a/Classes/zh_TW.lproj/AboutViewController.strings b/Classes/zh_TW.lproj/AboutViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..cacfb54605dfd87d4222ba804cea9e0308b16cb9 GIT binary patch literal 1402 zcmb`H%SyvQ6o&tGo+4yfFs+5AMR8MwQYhMu?%P;wBw9%;`bxf}`pqN_n53lYFk~{9 zlR4+VOujxnb=8rtOQl+9OY?QX6KJZjZs}*NFSTMn&^bFh#_#m|xS0|?>qTpAc(016 z8@_pD785zuRT(`{R77;h>@hYgVR>p$MmC-6@x_1ZU6X4^y=R=%)thZ0=zgLIL6hmB z70s}QX4r`4_gP(F{eaEBdOGDfDMo$P##Yai{@$u)bTb~<=!y14xO;jSiAkqee4y2k0gCa_?b$UvSlpToq`IwNLg{21Gat!3*DKHFG{U_R$< z?{>4&+ZFzUQj=+Ta=`qzq% M{A=a6s+!5uH|n6uoB#j- literal 0 HcmV?d00001 diff --git a/Classes/zh_TW.lproj/ChatRoomViewController.strings b/Classes/zh_TW.lproj/ChatRoomViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..23f2ad76d4f4f51245eddf3ca04ff091f12ac694 GIT binary patch literal 3250 zcmcImO>5gg5Pdzyp^#I~BG5~~PMtb6p%jXpq!?1gU?-)Qf}A?7T3Isw$QKxT41wbO zivEGz{5wjIJ@;3%eY^5nt!zbFDP@rmv!mI0^JZq}_pcl_unq%NIIz&?GVq+w8fvKE zP`-y4aCvYkea1Zt$6RfxZKDO7|Ju~Jz&`g{+;L`BDpLE?^v?tCe&qf!wQJa!X>CvU z*Xd1;-`gl8I%REU;oJDfk?=0ZrH{xZx*j?_(?L^Wap9+phCOxXfjH}AdhGVhqfDawdgU;#4RELeK?9Bt&F$e5g zF26ct=x%mObG0rcy0z|ownh{4VY7Idl%p`x0X;qEeV{n`7fmrG3S~85!}rv;m*keH z$@}0vy*py(Y~yU|Nfu@-oRS;CR4*2nLay$_5{fC=S*}ma)z>e3Nf}Cy_Z8zLW(W%+ zZU#?3yCgv(Q9-# zuG2G*ED8SvW9d0RBwB~IEV69KIm+Od$9i%9l6OPr+0;<;WYjcLMk$mPLZTa)oOxSc zZ7rKik?+fyXY` z<-1Rb%X}%wCC)Ms#oG!0c!NCl*zNN8z&h9r@wiB%Kt2B^2zs{f%g$(}l{bBSe*hJ$ B_<#Ta literal 0 HcmV?d00001 diff --git a/Classes/zh_TW.lproj/ChatViewController.strings b/Classes/zh_TW.lproj/ChatViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..9e74e918785202115e7196fec881aef819ca01ec GIT binary patch literal 1474 zcmb_c%SyvQ6g}WBUs1a3!m1!xMG$R;f*OQ~J0Wcbjm9cTt5t9zxGG40#kD`+qCeu^ zoeTBMOde1Z>BKUmlzV6H-1C_G{biw!8YUV%X*A;qvP8)_L%E16QosI@KjEpw3$6;zRTThG}B#;xN?o%Sp46>;!L+x(+cko z^|8Fe;xb3nBf1cmyfc8K`VH7+!bEut`E}>jb)=ZqYzp%HyK@^CF|#Jj7uU@?e;q!L z%JXgFpaY`3r4~)<645z>*ms#9i?A(YY06hJV(P5Vlga&yc)D3QeftOEd?zFhOEAi} zG9Qfj_htH(LFG`1Az$t;yOeL-i`g|%v&AXW=jo7&y6W>-CuBse4A(5dN2o)G?fmn&blfj806ik*flmKBqLmp7n8Yq{@kPL*W zVAYunNer1ly_rB2l?*;Wxg?-W4%`$cue4A(5dN2o)G?fmn&blfj806ik*flmKBqLmp7n8Yq{@kPL*W zVAYunNer1ly_rB2l?*;Wxg?-W4%`%1h7_sO-~v}=0X10*=o&5{ z+k!!lC|i`^CcLQC?+4kz1%#ygC=cknB8FU`ojD94VE5(#T?q>b^8J9_Txz+x7#z}& z&`bq}Gp5V^8M2`vOG?P&HW%UYT@}4uHq)$ literal 0 HcmV?d00001 diff --git a/Classes/zh_TW.lproj/ContactsViewController.strings b/Classes/zh_TW.lproj/ContactsViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..633b2eb51f3790de0d51d7a6b08907d692e8d063 GIT binary patch literal 1732 zcmezWkBdQ{L5o3w!I>e4A(5dN2o)G?fmn&blfj806ik*flmKBqLmp7n8Yq{@kPL*W zVAYunNer1ly_rB2l?*;Wxg?-W4%`$+AREL>2J0^Y>n#D>k_OgS0#scDHP;`gHw(y5 z2Abu`-~u#*6#8H`G5-uN%wUg&<8~fxj>t9 z7(&4Q%>lX<7FrO0Lc)g>e_%Hi)#c>7nUt9F0s1MAp@1O+98(~lQ4(jSXmMsra-3nh zhqf_@ZXf=*#O6Ojaf!_a^3ozH@#@Hs0)*(XiQji-Xt8HTa_ntLofkpd_@b7-2*nyT zd_qcmIf2WzY-kMNDoZRF%+cZqBtmMrc%}bd82P0O_K<^>h?MyQyV;0x5#e$GBgzxK literal 0 HcmV?d00001 diff --git a/Classes/zh_TW.lproj/DialerViewController.strings b/Classes/zh_TW.lproj/DialerViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..6af0b616c2733dcbdf6cf455be27ba16053ac543 GIT binary patch literal 4462 zcmchav2GJV5QhKS4?ulNnSx-SlNcc+Z~!S1k%=5g8J&}h2pGrMMhX=jMVfRxP2PZ( znioL={@L;7>~rkB0d2Ihb(*`qnQ!L5o!vjbYuLa#66~Ol3}cQ2kNI1}F4}m_{{!T> zzyvRF#;ZO~c<&LP$Z*V&yE$j*@ot~L2|nW`@AcfX{$0;8;GG;JH&5oCaEzw2^?e=A zc}L4JpWMZ>n>d!2t*d;0uk++kJk>b`Oje3bsvmK=IS}bVnE2MgfPtyw0cr6w*o95c6 zm-sY(#ag}!cr6w*TV@*d5}&3Ktc}-VL9=b9Q7`dn{ED@_HeQPbP0LK9UgFbq*>^MU z99HiP(uE!>7Hij;^%bAY_sL~-YA$qAu~?bZOMIFx_jOXIVW3jYg^nr~E7iQW_;hWz z?|vU(tE0t!s!H|WmfEa*KdyehxtrbTQ+FOoc=pJ+tM6AJEO%WYwD;ZH{N7z1$JD9p z;qwZ-<-RPu_Rj1TH19b+vCp%dUZl!$hLIIj&YG*&)COeCt66PUHHTt|pM{-D>K3}P py47YSp7j@>?ttrV#=4GiN=3^lyV}>>;A&Ogr>V`#yE=jz{sJoLqlEwf literal 0 HcmV?d00001 diff --git a/Classes/zh_TW.lproj/DialerViewController~ipad.strings b/Classes/zh_TW.lproj/DialerViewController~ipad.strings new file mode 100644 index 0000000000000000000000000000000000000000..f47328c1de6bc15627ad297cc325e3f52e43ff99 GIT binary patch literal 4684 zcmchb&raJw5XQfA9-wE7BZpFlKMAUk+R#=)DoRnHJyuQ#Ds2d9lB)F7TMt~g@ie>v zSI)dhrP6PAGC0I>?4jCfmB{gW_uJph?07bJe=1nPG9qlFhXfef_~Z^=-LGR~qPNVIR(QREr=_%)?q|3@uU~ZccAGCgIHd~PW0?ouN{;#yPQ5LJ zNh~%^*&@R`PdiN-ag?*cz>n{9o`{zDh7)hEA<0~`+hhK^W-TCV+HLlKK54HU{l5Hq z{_)q3R{G&b{McXNhk)663Z z;YpqqcqWEEp}uiswr z=$_A~Sp;c52yCQVrN zjc~+@)zz=t{M}<)T+LN8HG{ijtr-@pho>*gsyY#EWPT#RZSP3i2_#XQaM{!>+VCUbkzoy^=R%blQ$cBa1BQ)+t^ zQluZ=0vf?1@9hDzQxUh;04cYfgc5S?=nSI$w7JwR;ZwkhI35(z~@r4pf>oivIJZh}&mFA0f%!2jv*;LJ}c zyj^>;j=lEU)5>y`?5=0#&3iMu&cC}JJ)=YF)0h&9=o(j_UgAEWDUIm8{=A_S*M`;@ zeSx`%7Pyvrbxd=L@obD0-{}qJ=9o!#Rz`aDr~JvcnEiZy)zg}5#d;gY@z*cfXT zQ=Qus_#*m(Tm9ZT81gA7aim7Nvb6aX{k%PUbbfpGC-@eQ`N7O z<>B|K9+P2YUxusp-W~$mgl^Ei6qZRp1J^}$*kYPE5Ht?R&bXxN%jThX2*J{dRawDZ}yj|7!{M2&RaHBDbAdX-@1 z>@gP`)J{q()J=@j-3r}ck#|0q)|fw2Lkbt$H|#WfcnA!$oC$Z`A64q($Qtv$#WpdH zbRMN=Waf8{+%L#=Rt~7VXQ~mYriwmgNbP4_Rv2S*>B)}CZriA>+ z`9@cYdL!bqbThsX`)js>>qU)p<;>+@mH~T?nZG8V*Ey!T9$tsq?$NO7_Spuh>x`Ot z*`kN5w_aEG2rHdjjo3P#&8{Tg?#g5=E-jY(U`VPDw((cysOV9Gk@pK$n>v{eaE=+^ z-Eu(Baq~V?uQ59swrnDy_`=|zS+r0s<75wZH{6&USozsXoVKDTlB zrx+Rq!fAMLKYtF^n`>d&H(jgfZVYVny`-+vrS)98745p#+P$w^Z|)VV z&s*MQ?i}>EWuNUAwRDY41DRaXKR@Tg5L1WDn{ms?H_O)-_k7z_P%mRC9OW+{lfAy0 kj!^9l`C>c0O@7^aMqdeeg_(T$Fimw6N4=j?He4A(5dN2o)G?fmn&blfj806ik*flmKBqLmp7n8Yq{@kPL*W zVAYunNer1ly_rB2l?*;Wxg?-W4%`$cuElO|`uJqpv1G$b12ub%*9?*A147or%a~MLve#rs45*8BV`vJST*jx<&e?30( literal 0 HcmV?d00001 diff --git a/Classes/zh_TW.lproj/IncomingCallViewController.strings b/Classes/zh_TW.lproj/IncomingCallViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..4771c71db89675a258204b47add9d37292ac1b3d GIT binary patch literal 1558 zcmcIkO-sW-5Pj!}SI?ox9<;HxrHF^xf&`>`(0bm6B9SyLb^Qdv-_;+dzHG7ytmb12 zvP{_Q%+Ac4H?!Yg4vx@qqN}T9JlKG1j)5R%+piq1Ol#wvJNpv$h#pe z-f&6XoSG>2GT~pK^f7no{VUo$sB=mGliaqS>D$c7;l7WU!p9y1| z8hjp1gvp8R#HCE_U2mrccNd#o*|I_GvkL?E<&rgvSv{A3f-g)|gSX2LNGCwQFUg55 g-sIg2%Ue7Xo+JDir)e#*00BN}F$^ZZW literal 0 HcmV?d00001 diff --git a/Classes/zh_TW.lproj/IncomingCallViewController~ipad.strings b/Classes/zh_TW.lproj/IncomingCallViewController~ipad.strings new file mode 100644 index 0000000000000000000000000000000000000000..af166daa87bda2946eb7bb429760a7203b274f79 GIT binary patch literal 3130 zcmdUwO;5r=5Qg6~#;fOsBL@Z15@I|EB&LZ$52)uth^Z;XVEs%?{9XJw_1%_*Ftr~G zVl>T?GP|AGXWyBf&yN!JP=SRue7LyhW8s*i3i79WWLlp)F)~iWn)+rp(x5%vj8b zsH%kYM<}>I&Q2I#G9#fUz^KaWq5sUVIg!Ed($o2>msM4%cQaT=UtLb61u}LPm`YuO z^S*AS-ob>fp3l{Pt3Zd3CvSMAq~kQ`INEeh$IHBY1^?jEPKSz0yUBHU_~enxze^~Y WxD6(*Hj{IB$o|Eoy%rUh_w;vol)MH2 literal 0 HcmV?d00001 diff --git a/Classes/zh_TW.lproj/WizardViewController~ipad.strings b/Classes/zh_TW.lproj/WizardViewController~ipad.strings new file mode 100644 index 0000000000000000000000000000000000000000..9e0f0eb2563f28657b62e05435f529c84926ea9b GIT binary patch literal 2474 zcmcJQu};G<5QhIbPZ4G803xkuCB)KpiGGUGc1sC zZ$^(j?zpz#imIZ_X-~1?{JnR^^%Xsqv?Q2Tepk5u@#wLlfbWInqE)V_iehF97)P!y zr_v49%&c&)bt%?co{E_vgjA0``u{4B@EPk9esXyCL=ME)BJ7S6%&6gE-rr6cf}<}+#plfq}|LW8iK1b}LPQDc0}>TQ(};q)8y~2J4`N{mC?O9Lj2eW*iv_DlQ`C*~3G8k@i46RW@qJ?WxGio!`fo?3QXt&H${>wJd8%Mr zNK+%FrB4yR-gAh~$FJ%+*V)7yMkgCaQ0%5OVB1ig2RXmTHogKpKdf=Fr_tp{r?b3d zXby?Qdri$1ui^vtjd>mDOG2JbIY=&He+!L4xGTn<<%C^X33zy>OPehNBF!sM8gQwm z;1E?iAW)I2lSwg}rUfh=Hr#)hVnN@eiqf*gw&ximFj= z@x}Rh-D@ANo;4q&KqyHvPMfPW=v1aH_(hyooT~Dag)etyBqCJ=%lzHr(h-*zVmaN= zA$bS3^hE}0AtF2_@LMz_ojRyK6p913=g|GHoQ9en?y5`hWJ>YQ`9{D~1Rtu=m delta 124 zcmexzgK^zi#trW{HuG>DGTfYFvyRm&g(06Imm!fMlOc~mk0Ay~DlsT9*aEQn=zX!kX8rs+}O<7)Y+WaCL6fqOb&1onC#*#0AzDae&@`=s62V5isEJi X7bX79H-dQ>H$MoS!MpiU$|QCG%sL?n diff --git a/Resources/de.lproj/Localizable.strings b/Resources/de.lproj/Localizable.strings index cb4167fd8cd47cc6267720a90dd5962ad69545f6..1259548b0b0f442f862e7dc8cddbc479c7b29e5b 100644 GIT binary patch delta 916 zcmcgq%PvDv6x|h62Od?=qPeM8y*luSiH5o{Ffpk#q(W{VXk0CI+c0YQ0h=Ex9v?&t7NN)DcIcJ}>_FDVwlUv8jgX3!6#m^IgPK&anQG!fLkwH1E zk8qNw9N+jnZVRhDnk7HZLkK@VO^p1Eah5S0u3EL{T&I5a1v_{k-ptA1iaj}6=NQYN zUY2$#O&Qt(>n>^^;4`pGVZR9-lGmu8=J+zyZm*5aH*$-&skH!*1&I|wv_x5Udp*u_ zM#^$9RBK<%+|{%fz-a=K1XogV8d8xBjm=uNIlo~QeI*sJ@# zAo9?hLZ|k}jc*WBdaoe5Djd*IM!>fruK6*#AxQgGHyZ~H_|j-wC=nkHBXImF$L^Mx z9gnm*iUvF-)n)0PhS*kbXDYv0R52B$bUUL+q~jWeDMC6e;*+izD)UipSxL}v{tNr? z-|6{yEynB7TKjPMyuO$Kx9CWz$1E8Z^*h+_;k=+)kj5OOF)5-itsH3h%Y>HvWN<5i xoQ9AYw#vE}l~-w^+>pHR z8?2KXTx8Up7%~}3fH0Lofx(3#pCOka5h#)eP)t-FGC1>+Dw;cY>FT#WvH?u@e;oZ!X@r@k-n(!_- 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 b38bdeda6004bac13ceefd2ee4a11ecd5baa892e..5b7ba9cfecba996c75761fb4409b48a322cb46f6 100644 GIT binary patch delta 766 zcmZ`%O-mb56ukpt^8pguSQSAAHx{H_lt@=06t&PIq_ln}xR_?584SrZGZRb}E&U1g z{)7Gkaejf@`VYD&SruI<;xF)=H$u`%2`_W+x%ZuW&U^3rmv#NeI_akM$MUm-P}*Wk zO`1{{M>>dmKq3?Q_;1S*5L*J&L*TxYWC3{*YeBY5FZcH4xpYkypwa@;LOg-Q|o;-4%5wo=GSwNy5ga=r%rK7FRD*9HMOII(pdbvI5w`0H;=OkTgNb6t(@!6 z=?wA75gbz^X=%B#c)T{D``bJEW%b?vn@-nmb4!k~)*vm`(AEcJ0TdCpp{*vKTAS7Q zW^=~U!hEhCNaNnQi-tD5HVswH#34@717^!>`6w&$7C&2DpsWnXtjnzJ0O#<)oN#h- z>}_M@+1`^^6wv}3g}8`$SG*?&-%u{@_ws&xxuj53B017;yH1?iu1tJoJEhc73L!i3 z6v!cRA9&Xwp6nxMZ-_4q(H4g$mUy8YXk+ogBuqAp@tVoW4%W%jF{k%}R$u=0QusD} z5JYBdADJfy*ve6fu%@ggDw-ia~Ls zEpF~FP)b)_1V%*ZqKhgbh)b6R_x^+~dhUxD-F8tPZ{~iSIq$qPcl{u6dKhRFLh>{o zOL>n7UH=6a|g?4-H z48Omal;6>}@+o@mUhpse!GCz44Lzn|5|e%?v0leti-kMoYubIVL?x(LZYiJ%s>pWw z{@tsNGK(|V?r%LGY?DXbVL426%eO?&Roo?e$%5=AT$_iVxbo55yY6cqiB8K|%DIJE zPr5fT!8rMiWTUe$XRVoqH8t#OTj(W3-s;&4zs>{$^&Azj6uy9^zRp^|=TS9?%J>uN zcizTIQ$o#98l;bIImRjZnHYMOe>K;_Xh z*g97pZdb%R1Egme6rp|Pse#|4xEfb)4isha*&^EiTTaIfJ$8o5(;+`NwbuR@uw}Z~ delta 148 zcmX?egt28OMin+$aCnh@Lz{;~I}AkPj7Om~5b=vU!mv z5AS9lb2HY-S8PPo6c}t76d05kP8vKkSYq(mV3I*<;OwAqgERwwg9L+60~doBhCGJJ r2@YwKC)f&1wzE^1yhu@o1tz$e#omo~@&%uNoA>xF;of{Ix`_<{K?pCh diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index ed548e5fd1a2f04ac9ed33dea49ab3added8d0ac..0a9e737e4fdf7d83dcee27e5443679c84a273f18 100644 GIT binary patch delta 773 zcmcgqO-lk{5FQ~EgJkna7( z-V35bzo5I|kLb{$=UpY~R9)g__MLa0*=Ob%=H<=x+I4kqy!;$lQY|WzAcKmOBb_Sn z8;H~#&&0P(mxu_e0=E!1X`6z0tFRzHMOHTd%)qx>8T;DnU*O1kfZIl%H`YGjPjGKe z;X7lNl|{eZ3b%Y5ODfZKDxh*>Se5pv%+cheXMpg$FU?n~`#}|M?r0$%(WW>a%krbP z>KXLP_nOM>nN#4qupK)dQVKQexDfveTz1~&naT1KPE)oS{aqT+ype4EYO*YI!72$x{o+!gtRck_*m59|Q{ CxGg~d diff --git a/Resources/zh_TW.lproj/Localizable.strings b/Resources/zh_TW.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..f51670b73b55545c928e8f937d8cce5edccdcf20 GIT binary patch literal 28284 zcmd^|&u?5w5y#(w3psJ-WL888t6hi9aS^ay$BE3wNmwTvt%QW^nfM2>$KJ6WCo3VY zXb}FW1m=GmDVdpEM|%=GK``rB32^{cC2{`cQo)w|U~ z^`JVCzXSQZFF((!QFSce538}Xyr_1op|lO9WwUxEf4RObtt0vLO!_QJ+q>1R>RR=V ze7adJNxuVWKTdc3AhrHju5?}fk=%Jr?w>u9JAzcBfefvkFJr%SkvhtuD>+iYXToA_pIcih!)| zUGqWyLgWo89Lm4vLqGk_s2L0eEvp-ygylVupXZLw-~Ge2ufFxCQp?TGjxVLvi4D)3 z-TK|n9>lgOnrOiRbEVd)x?d6gd_eKzn>~_2tG%M~}|ths8aRwS-^3 zE`1L~5*J?k@mOFlmr!6fPmG!Ia^m)$px%;CyJ_`#kEiQ;92z`DBtNePFyz*_kw?`H z;gzii_@-VJYoIRmaR1Snu0sCNXDTzSStvOwynW^n@%%_?;1}&VKKy(AxBF2RO6g-> z_&}(&CqMNFWpb}bS{Sl@L8jieVa#&+y)XW?_nU_|PyX}gFTR=&oshgy(&5i!h3NXt zcuH!u_nimLSQ$wFk?0uKHo8VN4WGz@>`NQ=dtW~5s>8lujj%P|ODg9yizi<;1=R1E z_3ZmRbsjT66~6AC@pL!IDDl5}e}~mh;y6~52x3!uc zC3j0WjfX-cpm7h;z>@ruUq$2XxZZ~{2iE@Uu%m|Sb(P*#CP3cVhmH8m> z(N`%c8qbboJz{fwE;I&Nx#N+s)Z6{&tJQL~BItHR*2zVYlfv&IgNt59-iXpSLC>;g5F8a^jp&S!Q{^*o(jrch_TpXTo~EA{r6(N|<#l_b3O!D~&mooLLO zLMqp*Rf&b0S-SCA7OUhB*}I%8(z}pdMo?}Y3Rm&_?fKYUjRv*XiE!4gzPW)|%1m-Ee5ep*jI z{^VyyS$K~ySH_^P@s7>Iej=3&_X}!ewA1hMw40rU_Q-XY3rj|X!rme~>|>F_b_!4G zKTou(_r^l$dc4&>yJr6=w3bov^vi92RP&=%4%Gj%+MDcM`(2K_KJLoAn|mK+s~>B2 z(&NWydRQj+*}pZv{zxPYzkfHyrWzsW>hLv2F;9=BgzgV#e%lG=3QBp&8sm;?n!m& z6R|hSz$e*)s_DCW$%^(cq+kHWVMr03$$mz4{w*1X9bn&M|`2#z`_u~|+-IChX z)AX|_GeZt^*MQkBChNNGW^&&9Vz`1W`en5yk?}o;ZB?+dqKW3IltABGWScd-)?`NE zB95lQQKbZZ$9{|MvLQXxJm5*zEqt?DbXA`8rq7C+b zL1%l8U-#alUrf7!OUYhXedVMIS#t5dw$M|_#=5GQqqxSrvpsMpoUqgs_GED7BY#luDZP1cX9Pvoh7e{oGl zBeRlE*!UHoF}+{;efxVfv&+UX`Z!fPe=76B9%b6JU5i734xx@@zlOlKM~%*UX&b$4 z_oJJ4+-DD4`G2upYot~ElkH?Z$PE+E>b@Yct<}vVaSudB9~XYOwrF*hW!p+5ncsc- zdK%153Lm63rI}+Y@9`{7Wu_h*tFEobd=RY&7qrr?8c$}eBGeqL_Bvn2Woa-U*rtn&{3eapLK85+~YC&~HS=IvyRw<{KT1`D4g%7PeVyp&o zPxx`=xz@hcKkvfYZi$W0TJzDc--|C-(%Uloc}S9STzA#%)aE_OOspkN>keDj%I|k? z)GY9ok@9+-6L}c259sY?r1dEI*!}N|K~ILH+w*I`8jpm%OuTF~1$D=5bv+*2r2dzM z)+$}>O+nM~+8y&ojJ}<;ui1^f>rOv|dQ8QxYS+n#uB=j-FQW2yEONUiazU=%Vk~f4 zTicVe_L$z&&tP`(7UR}W$8w5REAg|;mq`2Fak+?f$3x$@!>;+3*lG4x;1B18wf@J> zz^FCfNV#YHSK7Um?MtWGj2cTha+ytjYHR$+?0@m*3*9l)^=f{OooDmAQAT<2^}RQ4 z7M$nsr-(skZGKeR@!C|bygsnjk^{NbKV^37d|j{*x9JJ5Ly>SkseVUh^XaCH>pb_w zq4s`niLJa6g@BCXsar4WDSJUn)QGxAg54krp>~Sw9TAFV>`Yeh;xxYIy*i81@3Hh? zji^P_oo0=3(0DvgIsTsXLTYmyuMr#BK(%CA$K|6XuMO8le%M92iWsA~qG!>%YDsd8 zSDp-+CmOi!S4bOT?GuFxFADog6g-w+kEVGo4n_UlNhOZv)hHwnn4{(y~+* zAK4uH-WQ9$e)7lWfQ>-wD_?o{AMaDptcC5i^S&dZ{$^b+?-S{ocl?O+r5O8Q)M4O9 z4n@khQXIf{vU`20(C;a+GppxU<7FX!#7K%M&(#yci(=oYtaNCL&XE?h19e9BjsQF- z#}eQn|8#t2L5YLP>zXI< z9`QGCW}d^di$gP=@WSvCbB@W^z*4oSnQDtj`sAFDfMvN8eGU)x{VYD4a9QI=Q4{+4 zH{iA9^&clHclC-v_C!!Um*0AYS-m}KbhJc1cZ??AlkZx4Syof~nCVHZ6Q#YLT&bUQv`E_Ma-MsmXMv{FN)GDZ$cZ2yyeTsCJ?{sVGNaN#Rl4p96;EVz~Vek $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/submodules/build/Makefile b/submodules/build/Makefile index 62e0509df..37ce9eb82 100644 --- a/submodules/build/Makefile +++ b/submodules/build/Makefile @@ -110,12 +110,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 @@ -137,6 +137,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 From 44af28fd8a2ce4841161a15b46b8a0c31354702b Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Tue, 24 Feb 2015 12:13:43 +0100 Subject: [PATCH 16/48] Fix issue where the chatroom could not be found for local notifications. --- Classes/LinphoneAppDelegate.m | 6 +++--- Classes/LinphoneManager.m | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) 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/LinphoneManager.m b/Classes/LinphoneManager.m index 11fbe85c7..a43b03775 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]; } From ada0db80fd7f10d7aa08f2420ed99de00904d014 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Tue, 24 Feb 2015 15:20:48 +0100 Subject: [PATCH 17/48] Allow a magic combination to trigger a debug popup. --- Classes/DialerViewController.h | 2 +- Classes/DialerViewController.m | 94 ++++++++++++++++++++++++++++++++++ Classes/LinphoneManager.h | 1 + Classes/LinphoneManager.m | 10 ++-- 4 files changed, 99 insertions(+), 8 deletions(-) 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/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 a43b03775..2f5606027 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -1459,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 @@ -2080,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(); } From 720b154c1df58368c558beca97dc4c65b3844b4e Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Tue, 24 Feb 2015 11:55:52 +0100 Subject: [PATCH 18/48] submodule: Update Linphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index ea0aecc8a..2c7b9f2cf 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit ea0aecc8a7cabf3bf7da1cd92039c4e8259bf02f +Subproject commit 2c7b9f2cf256baaa7905eb2825c5db5fd19bb149 From d8fe77bd97bedec075a4577edc597ab2ce102545 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Tue, 24 Feb 2015 12:17:49 +0100 Subject: [PATCH 19/48] iphone-config.site: use XXXFLAGS variables to set flags instead of using CC/CXX/OBJC compiler variables --- submodules/build/builders.d/gsm.mk | 2 +- submodules/build/iphone-config.site | 31 +++++++++++++++-------------- 2 files changed, 17 insertions(+), 16 deletions(-) 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/iphone-config.site b/submodules/build/iphone-config.site index 033e2bd0d..95812fc57 100644 --- a/submodules/build/iphone-config.site +++ b/submodules/build/iphone-config.site @@ -4,22 +4,22 @@ SDK_VERSION_MAJOR=5 SDK_VERSION=5.0 MCPU="" CLANG_TARGET_SPECIFIER=miphoneos-version-min -if test "${host_alias}" = "i386-apple-darwin" ; then +if test "${host_alias}" = "i386-apple-darwin" ; then PLATFORM=Simulator ARCH=i386 CMAKE_OPTS="-DCMAKE_SYSTEM_PROCESSOR=i386" MCPU="" CLANG_TARGET_SPECIFIER=mios-simulator-version-min -elif test "${host_alias}" = "armv7-apple-darwin" ; then +elif test "${host_alias}" = "armv7-apple-darwin" ; then ARCH=armv7 PLATFORM=OS CMAKE_OPTS="-DCMAKE_SYSTEM_PROCESSOR=arm" MCPU="-mcpu=cortex-a8" -elif test "${host_alias}" = "aarch64-apple-darwin" ; then +elif test "${host_alias}" = "aarch64-apple-darwin" ; then ARCH=arm64 PLATFORM=OS CMAKE_OPTS="-DCMAKE_SYSTEM_PROCESSOR=aarch64" -else +else echo "bad host ${host_alias} must be either i386-apple-darwin or arm[v7,64]-apple-darwin" exit fi @@ -28,12 +28,12 @@ XCODE_DEV_PATH=`xcode-select -print-path` #new path with Xcode 4.3: if test -d ${XCODE_DEV_PATH}/Platforms/iPhone${PLATFORM}.platform/Developer/SDKs ; then SDK_PATH_LIST=`ls -drt ${XCODE_DEV_PATH}/Platforms/iPhone${PLATFORM}.platform/Developer/SDKs/iPhone${PLATFORM}*` - SDK_BIN_PATH=${XCODE_DEV_PATH}/Platforms/iPhone${PLATFORM}.platform/Developer/usr/bin + SDK_BIN_PATH=${XCODE_DEV_PATH}/Platforms/iPhone${PLATFORM}.platform/Developer/usr/bin else SDK_PATH_LIST=`ls -drt /Developer/Platforms/iPhone${PLATFORM}.platform/Developer/SDKs/iPhone${PLATFORM}*` - SDK_BIN_PATH=/Developer/Platforms/iPhone${PLATFORM}.platform/Developer/usr/bin + SDK_BIN_PATH=/Developer/Platforms/iPhone${PLATFORM}.platform/Developer/usr/bin fi - + for SYSROOT_PATH in $SDK_PATH_LIST ; do echo $SYSROOT_PATH ; done ; echo "Selecting SDK path = ${SYSROOT_PATH}" @@ -47,23 +47,24 @@ COMMON_FLAGS="$COMMON_FLAGS -Dsha256=polarssl_sha256" COMMON_FLAGS="-Qunused-arguments -Wno-unknown-warning-option -Wno-unused-command-line-argument-hard-error-in-future $COMMON_FLAGS" # you can use ccache to speed up build, in which case just define LINPHONE_CCACHE to 'ccache' - -if test "$LINPHONE_CCACHE" = "ccache" ; then +if test "$LINPHONE_CCACHE" = "ccache" ; then # ccache doesn't like some options COMMON_FLAGS="$COMMON_FLAGS -Wno-variadic-macros -Wno-pointer-arith -Wno-return-type -Wno-tautological-compare -Wno-unused-function -Wno-error" fi -CC="xcrun $LINPHONE_CCACHE clang -std=c99 $COMMON_FLAGS" -OBJC="xcrun $LINPHONE_CCACHE clang -std=c99 $COMMON_FLAGS" -CXX="xcrun $LINPHONE_CCACHE clang++ $COMMON_FLAGS" -LD="xcrun ld -arch ${ARCH}" +CC="xcrun $LINPHONE_CCACHE clang" +OBJC="xcrun $LINPHONE_CCACHE clang" +CXX="xcrun $LINPHONE_CCACHE clang++" +LD="xcrun ld" AR="xcrun ar" RANLIB="xcrun ranlib" STRIP="xcrun strip" NM="xcrun nm" -CPPFLAGS="-Dasm=__asm" -OBJCFLAGS="-x objective-c -fexceptions -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch" +LDFLAGS="-arch ${ARCH}" +CFLAGS="$COMMON_FLAGS -std=c99" +CPPFLAGS="$COMMON_FLAGS -Dasm=__asm" +OBJCFLAGS="$COMMON_FLAGS -std=c99 -x objective-c -fexceptions -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch" #Force install script to use -C so that header files don't get re-written if not changed. INSTALL_DATA="ginstall -C" From 5e60c1864eab4ec35ea4ddd26aa21634a0289616 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Tue, 24 Feb 2015 16:48:59 +0100 Subject: [PATCH 20/48] gsm builder: Rewrite veryclean target and correctly build targetted architecture --- submodules/build/builders.d/gsm.mk | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/submodules/build/builders.d/gsm.mk b/submodules/build/builders.d/gsm.mk index e3c462fb2..ce686b064 100644 --- a/submodules/build/builders.d/gsm.mk +++ b/submodules/build/builders.d/gsm.mk @@ -3,7 +3,9 @@ gsm_dir?=externals/gsm - +#GSM build is a bit different: since there is only a Makefile, +#we must force CC to contains CFLAGS to compile all architectures +#as expected build-libgsm: cp -rf $(BUILDER_SRC_DIR)/$(gsm_dir) $(BUILDER_BUILD_DIR)/$(gsm_dir) rm -rf $(BUILDER_BUILD_DIR)/$(gsm_dir)/gsm/.git $(BUILDER_BUILD_DIR)/$(gsm_dir)/.git @@ -12,12 +14,16 @@ 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 install \ + CC="$${CC} $${COMMON_FLAGS} -w" \ + INSTALL_ROOT=$(prefix) \ + GSM_INSTALL_INC=$(prefix)/include/gsm clean-libgsm: cd $(BUILDER_BUILD_DIR)/$(gsm_dir)\ && make clean veryclean-libgsm: - -cd $(BUILDER_BUILD_DIR)/$(gsm_dir) \ - && make uninstall + -rm -rf $(BUILD_DIR)/$(gsm_dir) + + From 7cfd988c03135e992a0a5566b9c6aa3c497b4487 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 25 Feb 2015 12:25:25 +0100 Subject: [PATCH 21/48] iphone-config.site: CPPFLAGS is NOT equivalent to CXXFLAGS! Use the second instead of the previous to avoid duplicates flags (CPP=C preprocessor) --- submodules/build/iphone-config.site | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/submodules/build/iphone-config.site b/submodules/build/iphone-config.site index 95812fc57..0b963c152 100644 --- a/submodules/build/iphone-config.site +++ b/submodules/build/iphone-config.site @@ -40,16 +40,17 @@ echo "Selecting SDK path = ${SYSROOT_PATH}" COMMON_FLAGS=" -arch ${ARCH} ${MCPU} -isysroot ${SYSROOT_PATH} -${CLANG_TARGET_SPECIFIER}=${SDK_VERSION} -DTARGET_OS_IPHONE=1 -D__IOS -fms-extensions" #workaround for polarssl conflicting symbols - COMMON_FLAGS="$COMMON_FLAGS -Dsha256=polarssl_sha256" +COMMON_FLAGS="$COMMON_FLAGS -Werror" + # silence clang unused operators. This is temporary, we should find a way to compile 3rd party with correct flags :( -COMMON_FLAGS="-Qunused-arguments -Wno-unknown-warning-option -Wno-unused-command-line-argument-hard-error-in-future $COMMON_FLAGS" +COMMON_FLAGS="$COMMON_FLAGS -Qunused-arguments -Wno-unknown-warning-option -Wno-unused-command-line-argument-hard-error-in-future" # you can use ccache to speed up build, in which case just define LINPHONE_CCACHE to 'ccache' if test "$LINPHONE_CCACHE" = "ccache" ; then # ccache doesn't like some options - COMMON_FLAGS="$COMMON_FLAGS -Wno-variadic-macros -Wno-pointer-arith -Wno-return-type -Wno-tautological-compare -Wno-unused-function -Wno-error" + COMMON_FLAGS="$COMMON_FLAGS -Wno-variadic-macros -Wno-pointer-arith -Wno-return-type -Wno-tautological-compare -Wno-unused-function" fi CC="xcrun $LINPHONE_CCACHE clang" @@ -61,10 +62,11 @@ RANLIB="xcrun ranlib" STRIP="xcrun strip" NM="xcrun nm" -LDFLAGS="-arch ${ARCH}" -CFLAGS="$COMMON_FLAGS -std=c99" -CPPFLAGS="$COMMON_FLAGS -Dasm=__asm" -OBJCFLAGS="$COMMON_FLAGS -std=c99 -x objective-c -fexceptions -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch" +LDFLAGS="-arch ${ARCH}" #Linker flags +CPPFLAGS="-Dasm=__asm" #C preprocessor flags +CFLAGS="$COMMON_FLAGS -std=c99" #C flags +CXXFLAGS="$COMMON_FLAGS" #C++ flags +OBJCFLAGS="$COMMON_FLAGS -std=c99 -x objective-c -fexceptions -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch" #ObjectiveC flags #Force install script to use -C so that header files don't get re-written if not changed. INSTALL_DATA="ginstall -C" From 84fc91a53229de864bf4510000c0084272f7035a Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 25 Feb 2015 14:43:00 +0100 Subject: [PATCH 22/48] Ok, doing this work on a different branch for yet. Revert "iphone-config.site: CPPFLAGS is NOT equivalent to CXXFLAGS! Use the second instead of the previous to avoid duplicates flags (CPP=C preprocessor)" This reverts commit 7cfd988c03135e992a0a5566b9c6aa3c497b4487. --- submodules/build/iphone-config.site | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/submodules/build/iphone-config.site b/submodules/build/iphone-config.site index 0b963c152..95812fc57 100644 --- a/submodules/build/iphone-config.site +++ b/submodules/build/iphone-config.site @@ -40,17 +40,16 @@ echo "Selecting SDK path = ${SYSROOT_PATH}" COMMON_FLAGS=" -arch ${ARCH} ${MCPU} -isysroot ${SYSROOT_PATH} -${CLANG_TARGET_SPECIFIER}=${SDK_VERSION} -DTARGET_OS_IPHONE=1 -D__IOS -fms-extensions" #workaround for polarssl conflicting symbols + COMMON_FLAGS="$COMMON_FLAGS -Dsha256=polarssl_sha256" -COMMON_FLAGS="$COMMON_FLAGS -Werror" - # silence clang unused operators. This is temporary, we should find a way to compile 3rd party with correct flags :( -COMMON_FLAGS="$COMMON_FLAGS -Qunused-arguments -Wno-unknown-warning-option -Wno-unused-command-line-argument-hard-error-in-future" +COMMON_FLAGS="-Qunused-arguments -Wno-unknown-warning-option -Wno-unused-command-line-argument-hard-error-in-future $COMMON_FLAGS" # you can use ccache to speed up build, in which case just define LINPHONE_CCACHE to 'ccache' if test "$LINPHONE_CCACHE" = "ccache" ; then # ccache doesn't like some options - COMMON_FLAGS="$COMMON_FLAGS -Wno-variadic-macros -Wno-pointer-arith -Wno-return-type -Wno-tautological-compare -Wno-unused-function" + COMMON_FLAGS="$COMMON_FLAGS -Wno-variadic-macros -Wno-pointer-arith -Wno-return-type -Wno-tautological-compare -Wno-unused-function -Wno-error" fi CC="xcrun $LINPHONE_CCACHE clang" @@ -62,11 +61,10 @@ RANLIB="xcrun ranlib" STRIP="xcrun strip" NM="xcrun nm" -LDFLAGS="-arch ${ARCH}" #Linker flags -CPPFLAGS="-Dasm=__asm" #C preprocessor flags -CFLAGS="$COMMON_FLAGS -std=c99" #C flags -CXXFLAGS="$COMMON_FLAGS" #C++ flags -OBJCFLAGS="$COMMON_FLAGS -std=c99 -x objective-c -fexceptions -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch" #ObjectiveC flags +LDFLAGS="-arch ${ARCH}" +CFLAGS="$COMMON_FLAGS -std=c99" +CPPFLAGS="$COMMON_FLAGS -Dasm=__asm" +OBJCFLAGS="$COMMON_FLAGS -std=c99 -x objective-c -fexceptions -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch" #Force install script to use -C so that header files don't get re-written if not changed. INSTALL_DATA="ginstall -C" From e402cdcebce4fa1954681dd04062d701b71fcb48 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 25 Feb 2015 11:39:48 +0100 Subject: [PATCH 23/48] XCodeproj: Rename KifTests in UITests for clarity, and move LinphoneTester unit tests into the LinphoneTester directory. --- linphone.xcodeproj/project.pbxproj | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index a3cdf7cef..8ce416e2c 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -2176,12 +2176,11 @@ 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 */, @@ -2503,7 +2502,7 @@ F08F118919C09C6B007D70C2 /* Supporting Files */, ); path = "LinphoneTester Tests"; - sourceTree = ""; + sourceTree = SOURCE_ROOT; }; F08F118919C09C6B007D70C2 /* Supporting Files */ = { isa = PBXGroup; @@ -3006,6 +3005,7 @@ F0BB8BD91936208100974404 /* LinphoneTester */ = { isa = PBXGroup; children = ( + F08F118819C09C6B007D70C2 /* LinphoneTester Tests */, F0BB8BE21936208100974404 /* AppDelegate.h */, F0BB8BE31936208100974404 /* AppDelegate.m */, F0BB8BEE1936208200974404 /* DetailViewController.h */, @@ -3070,7 +3070,7 @@ name = Products; sourceTree = ""; }; - F0F952011A6AEB1000254160 /* KifTests */ = { + F0F952011A6AEB1000254160 /* UITests */ = { isa = PBXGroup; children = ( F0C7737D1A94822600E0C486 /* KIF.xcodeproj */, @@ -3084,6 +3084,7 @@ F844AB121A93E3A200428306 /* ContactsTester.h */, F844AB131A93E3A200428306 /* ContactsTester.m */, ); + name = UITests; path = KifTests; sourceTree = ""; }; From 1e1298138b4c9486d631c368cee8a8eef74aecb8 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 25 Feb 2015 11:40:16 +0100 Subject: [PATCH 24/48] Remove unused Pods references --- linphone.xcodeproj/project.pbxproj | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 8ce416e2c..660142633 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -998,7 +998,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 = ""; }; @@ -1011,7 +1010,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 = ""; }; @@ -1041,7 +1039,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 = ""; }; @@ -1838,7 +1835,6 @@ 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 */ @@ -2185,7 +2181,6 @@ 19C28FACFE9D520D11CA2CBB /* Products */, 29B97317FDCFA39411CA2CEA /* Resources */, D398D3031594B0FB00FD553C /* Settings */, - 60099578873114C41E4882F8 /* Pods */, ); name = CustomTemplate; sourceTree = ""; @@ -2302,17 +2297,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 = ( From 29f1c7f791dd225f5c0fb332b17c908ae3d005fe Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 25 Feb 2015 11:44:06 +0100 Subject: [PATCH 25/48] Version bump for app store --- linphone-Info.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From dbcc52091ae0b7082da9b11a7e85a02b49122ad2 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 25 Feb 2015 11:51:58 +0100 Subject: [PATCH 26/48] Fix accessibility of UIContactCell, thanks Marten. --- Classes/LinphoneUI/UIContactCell.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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]; } From 5ef50ff268fe724e61518fc72c0bdd4d988fffdd Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Fri, 27 Feb 2015 15:10:10 +0100 Subject: [PATCH 27/48] Revert "iphone-config.site: use XXXFLAGS variables to set flags instead of using CC/CXX/OBJC compiler variables" This reverts commit d8fe77bd97bedec075a4577edc597ab2ce102545. Conflicts: submodules/build/builders.d/gsm.mk --- submodules/build/builders.d/gsm.mk | 5 +---- submodules/build/iphone-config.site | 31 ++++++++++++++--------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/submodules/build/builders.d/gsm.mk b/submodules/build/builders.d/gsm.mk index ce686b064..c2f96fd2e 100644 --- a/submodules/build/builders.d/gsm.mk +++ b/submodules/build/builders.d/gsm.mk @@ -14,10 +14,7 @@ build-libgsm: cd $(BUILDER_BUILD_DIR)/$(gsm_dir)\ && mkdir -p $(prefix)/include/gsm \ && host_alias=$(host) . $(BUILDER_SRC_DIR)/build/$(config_site) \ - && make install \ - CC="$${CC} $${COMMON_FLAGS} -w" \ - INSTALL_ROOT=$(prefix) \ - GSM_INSTALL_INC=$(prefix)/include/gsm + && 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/iphone-config.site b/submodules/build/iphone-config.site index 95812fc57..033e2bd0d 100644 --- a/submodules/build/iphone-config.site +++ b/submodules/build/iphone-config.site @@ -4,22 +4,22 @@ SDK_VERSION_MAJOR=5 SDK_VERSION=5.0 MCPU="" CLANG_TARGET_SPECIFIER=miphoneos-version-min -if test "${host_alias}" = "i386-apple-darwin" ; then +if test "${host_alias}" = "i386-apple-darwin" ; then PLATFORM=Simulator ARCH=i386 CMAKE_OPTS="-DCMAKE_SYSTEM_PROCESSOR=i386" MCPU="" CLANG_TARGET_SPECIFIER=mios-simulator-version-min -elif test "${host_alias}" = "armv7-apple-darwin" ; then +elif test "${host_alias}" = "armv7-apple-darwin" ; then ARCH=armv7 PLATFORM=OS CMAKE_OPTS="-DCMAKE_SYSTEM_PROCESSOR=arm" MCPU="-mcpu=cortex-a8" -elif test "${host_alias}" = "aarch64-apple-darwin" ; then +elif test "${host_alias}" = "aarch64-apple-darwin" ; then ARCH=arm64 PLATFORM=OS CMAKE_OPTS="-DCMAKE_SYSTEM_PROCESSOR=aarch64" -else +else echo "bad host ${host_alias} must be either i386-apple-darwin or arm[v7,64]-apple-darwin" exit fi @@ -28,12 +28,12 @@ XCODE_DEV_PATH=`xcode-select -print-path` #new path with Xcode 4.3: if test -d ${XCODE_DEV_PATH}/Platforms/iPhone${PLATFORM}.platform/Developer/SDKs ; then SDK_PATH_LIST=`ls -drt ${XCODE_DEV_PATH}/Platforms/iPhone${PLATFORM}.platform/Developer/SDKs/iPhone${PLATFORM}*` - SDK_BIN_PATH=${XCODE_DEV_PATH}/Platforms/iPhone${PLATFORM}.platform/Developer/usr/bin + SDK_BIN_PATH=${XCODE_DEV_PATH}/Platforms/iPhone${PLATFORM}.platform/Developer/usr/bin else SDK_PATH_LIST=`ls -drt /Developer/Platforms/iPhone${PLATFORM}.platform/Developer/SDKs/iPhone${PLATFORM}*` - SDK_BIN_PATH=/Developer/Platforms/iPhone${PLATFORM}.platform/Developer/usr/bin + SDK_BIN_PATH=/Developer/Platforms/iPhone${PLATFORM}.platform/Developer/usr/bin fi - + for SYSROOT_PATH in $SDK_PATH_LIST ; do echo $SYSROOT_PATH ; done ; echo "Selecting SDK path = ${SYSROOT_PATH}" @@ -47,24 +47,23 @@ COMMON_FLAGS="$COMMON_FLAGS -Dsha256=polarssl_sha256" COMMON_FLAGS="-Qunused-arguments -Wno-unknown-warning-option -Wno-unused-command-line-argument-hard-error-in-future $COMMON_FLAGS" # you can use ccache to speed up build, in which case just define LINPHONE_CCACHE to 'ccache' -if test "$LINPHONE_CCACHE" = "ccache" ; then + +if test "$LINPHONE_CCACHE" = "ccache" ; then # ccache doesn't like some options COMMON_FLAGS="$COMMON_FLAGS -Wno-variadic-macros -Wno-pointer-arith -Wno-return-type -Wno-tautological-compare -Wno-unused-function -Wno-error" fi -CC="xcrun $LINPHONE_CCACHE clang" -OBJC="xcrun $LINPHONE_CCACHE clang" -CXX="xcrun $LINPHONE_CCACHE clang++" -LD="xcrun ld" +CC="xcrun $LINPHONE_CCACHE clang -std=c99 $COMMON_FLAGS" +OBJC="xcrun $LINPHONE_CCACHE clang -std=c99 $COMMON_FLAGS" +CXX="xcrun $LINPHONE_CCACHE clang++ $COMMON_FLAGS" +LD="xcrun ld -arch ${ARCH}" AR="xcrun ar" RANLIB="xcrun ranlib" STRIP="xcrun strip" NM="xcrun nm" -LDFLAGS="-arch ${ARCH}" -CFLAGS="$COMMON_FLAGS -std=c99" -CPPFLAGS="$COMMON_FLAGS -Dasm=__asm" -OBJCFLAGS="$COMMON_FLAGS -std=c99 -x objective-c -fexceptions -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch" +CPPFLAGS="-Dasm=__asm" +OBJCFLAGS="-x objective-c -fexceptions -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch" #Force install script to use -C so that header files don't get re-written if not changed. INSTALL_DATA="ginstall -C" From f953b328eab05d15164e077a54d3cbc3cceb973e Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Fri, 27 Feb 2015 15:10:30 +0100 Subject: [PATCH 28/48] Revert "gsm builder: Rewrite veryclean target and correctly build targetted architecture" This reverts commit 5e60c1864eab4ec35ea4ddd26aa21634a0289616. Conflicts: submodules/build/builders.d/gsm.mk --- submodules/build/builders.d/gsm.mk | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/submodules/build/builders.d/gsm.mk b/submodules/build/builders.d/gsm.mk index c2f96fd2e..e3c462fb2 100644 --- a/submodules/build/builders.d/gsm.mk +++ b/submodules/build/builders.d/gsm.mk @@ -3,9 +3,7 @@ gsm_dir?=externals/gsm -#GSM build is a bit different: since there is only a Makefile, -#we must force CC to contains CFLAGS to compile all architectures -#as expected + build-libgsm: cp -rf $(BUILDER_SRC_DIR)/$(gsm_dir) $(BUILDER_BUILD_DIR)/$(gsm_dir) rm -rf $(BUILDER_BUILD_DIR)/$(gsm_dir)/gsm/.git $(BUILDER_BUILD_DIR)/$(gsm_dir)/.git @@ -14,13 +12,12 @@ 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)\ && make clean veryclean-libgsm: - -rm -rf $(BUILD_DIR)/$(gsm_dir) - - + -cd $(BUILDER_BUILD_DIR)/$(gsm_dir) \ + && make uninstall From ea93d84adb9e579cd560700998839cc2cbdaa6a9 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 25 Feb 2015 15:52:36 +0100 Subject: [PATCH 29/48] .gitmodules: ignore dirty cunit submodule --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index 516d2b1a9..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 From a432e272d354e18974e68f192ce8c16b09c777bf Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Fri, 27 Feb 2015 15:11:30 +0100 Subject: [PATCH 30/48] libilbc: do not download patch at compile time but use a versionned one instead --- submodules/libilbc-rfc3951 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From de19d8be3d00f9bbc4e9d5f47fe0729fd6de7c6d Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Mon, 2 Mar 2015 17:01:54 +0100 Subject: [PATCH 31/48] Update linphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 2c7b9f2cf..1af008598 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 2c7b9f2cf256baaa7905eb2825c5db5fd19bb149 +Subproject commit 1af008598fb165050aa970313dae9a8ce6cd4bf1 From d646a914952670056029c13a7a6f697027146b44 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Tue, 3 Mar 2015 09:29:16 +0100 Subject: [PATCH 32/48] Fix linphone compile --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 1af008598..7cfc1b804 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 1af008598fb165050aa970313dae9a8ce6cd4bf1 +Subproject commit 7cfc1b804e2403afc61791b40fdd6c34690949ba From d58d1aaa7a1d420675ba12329dde97be4e5dd8a8 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Tue, 3 Mar 2015 11:08:26 +0100 Subject: [PATCH 33/48] Update bzrtp to be in sync with ms2 --- submodules/bzrtp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From d685688c732e8b0853f96e8a08d8e56dd2129afe Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 4 Mar 2015 11:07:09 +0100 Subject: [PATCH 34/48] Link with libiconv at compile time. --- linphone.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 660142633..cfd119eaf 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -697,6 +697,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 */; }; @@ -1781,6 +1782,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 = ""; }; @@ -1843,6 +1845,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 */, @@ -2225,6 +2228,7 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( + F0B026F21AA710AF00FF49F7 /* libiconv.dylib */, F05BAA611A5D594E00411815 /* libz.dylib */, 22B5F03410CE6B2F00777D97 /* AddressBook.framework */, 22B5EFA210CE50BD00777D97 /* AddressBookUI.framework */, From 5af4a1d78d875c42f57263cf7167183d96057cca Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 4 Mar 2015 13:04:43 +0100 Subject: [PATCH 35/48] Update linphone for $(GITLOG) fix --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 7cfc1b804..29873fe5e 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 7cfc1b804e2403afc61791b40fdd6c34690949ba +Subproject commit 29873fe5e1426aea4247b3146ca8fc5c017ec480 From 74ce90b8cb1e9566c79320b8204831f91d922e6c Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 4 Mar 2015 22:27:18 +0100 Subject: [PATCH 36/48] =?UTF-8?q?Disable=20localization=20for=20now,=20we?= =?UTF-8?q?=20don=E2=80=99t=20really=20need=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KifTests/LinphoneTestCase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KifTests/LinphoneTestCase.h b/KifTests/LinphoneTestCase.h index 452135db3..7dabd4dc1 100644 --- a/KifTests/LinphoneTestCase.h +++ b/KifTests/LinphoneTestCase.h @@ -8,7 +8,7 @@ #import -#define LOCALIZED(X) NSLocalizedString(X, nil) +#define LOCALIZED(X) (X) @interface LinphoneTestCase : KIFTestCase @property BOOL invalidAccountSet; From 4cf9052071b0fe1b83b6373b11b723c7c4cc1859 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 4 Mar 2015 22:27:29 +0100 Subject: [PATCH 37/48] Shorted UUID for faster tests --- KifTests/LinphoneTestCase.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KifTests/LinphoneTestCase.m b/KifTests/LinphoneTestCase.m index 542cdb12d..38b44a836 100644 --- a/KifTests/LinphoneTestCase.m +++ b/KifTests/LinphoneTestCase.m @@ -29,7 +29,7 @@ } - (NSString*)getUUID { - return [[NSUUID UUID] UUIDString]; + return [[[NSUUID UUID] UUIDString] substringToIndex:8]; } - (NSArray *)getUUIDArrayOfSize:(size_t)size { From 1264af51a07e5999a419eef85cd64fdbacd72e5f Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 4 Mar 2015 22:27:40 +0100 Subject: [PATCH 38/48] Fix chat tester --- KifTests/ChatTester.m | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/KifTests/ChatTester.m b/KifTests/ChatTester.m index 615f095bc..063717987 100644 --- a/KifTests/ChatTester.m +++ b/KifTests/ChatTester.m @@ -78,11 +78,11 @@ [self startChatWith:user]; [self sendMessage:@"Hello Bro"]; - [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Edit") traits:UIAccessibilityTraitButton]; + [tester tapViewWithAccessibilityLabel:@"Edit" traits:UIAccessibilityTraitButton]; - [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Delete message")]; + [tester tapViewWithAccessibilityLabel:@"Delete message"]; - [tester tapViewWithAccessibilityLabel:LOCALIZED(@"Edit") traits:UIAccessibilityTraitButton]; + [tester tapViewWithAccessibilityLabel:@"Edit" traits:UIAccessibilityTraitButton]; @@ -122,6 +122,8 @@ 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; From 121b709d22da6bfd70ded06ca2f26ef6b0d9a912 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 4 Mar 2015 22:27:54 +0100 Subject: [PATCH 39/48] Add a tester for contact edition --- KifTests/ContactsTester.m | 59 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/KifTests/ContactsTester.m b/KifTests/ContactsTester.m index a0a9a7838..8446da96b 100644 --- a/KifTests/ContactsTester.m +++ b/KifTests/ContactsTester.m @@ -46,11 +46,13 @@ if( lastName ) [self setText:lastName forContactHeaderIndex:1]; - if ( phone ) - [self setText:phone forContactNumbersIndex:0 inSection:ContactSections_Number]; + if ( phone ){ + [self setText:phone forContactNumbersIndex:0 inSection:ContactSections_Number]; + } - if (sip) + if ( sip ){ [self setText:sip forContactNumbersIndex:0 inSection:ContactSections_Sip]; + } [tester tapViewWithAccessibilityLabel:@"Edit"]; [tester tapViewWithAccessibilityLabel:@"Back"]; @@ -65,7 +67,7 @@ NSString* fullName = [contactName stringByAppendingString:@" dummy"]; - [tester tapViewWithAccessibilityLabel:@"Firstname, Lastname" value:fullName traits:UIAccessibilityTraitStaticText]; + [tester tapViewWithAccessibilityLabel:fullName traits:UIAccessibilityTraitStaticText]; [tester tapViewWithAccessibilityLabel:@"Edit"]; [tester scrollViewWithAccessibilityIdentifier:@"Contact numbers table" byFractionOfSizeHorizontal:0 vertical:-0.9]; @@ -75,4 +77,53 @@ [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Firstname, Lastname" value:fullName traits:UIAccessibilityTraitStaticText]; } +- (void)addNumbersToSection:(NSInteger)section numbers:(NSArray*)numbers { + + [tester tapViewWithAccessibilityLabel:@"Edit"]; + for(NSInteger i = 0; i Date: Wed, 4 Mar 2015 22:32:56 +0100 Subject: [PATCH 40/48] Remove pod install from travis --- .travis.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3a22f99d2..009c48e0f 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: @@ -14,14 +14,13 @@ install: - cd submodules/build - make download-sdk - cd ../.. - - pod install - 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 + - xcodebuild -scheme linphone -project linphone.xcodeproj -sdk iphonesimulator8.1 test after_failure: - - ls -la $KIF_SCREENSHOTS \ No newline at end of file + - ls -la $KIF_SCREENSHOTS From e154c69ec6a599659d25400b375118f2ecf3996f Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Wed, 4 Mar 2015 22:40:57 +0100 Subject: [PATCH 41/48] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a8c22f7c2..97e63cfff 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 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=kif)](https://travis-ci.org/BelledonneCommunications/linphone-iphone) ## Build prerequisite From 51f504c577686ce6bf7cb67fb82cfc3a488f3801 Mon Sep 17 00:00:00 2001 From: Gui13 Date: Wed, 4 Mar 2015 22:51:30 +0100 Subject: [PATCH 42/48] Update travis again --- .travis.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 009c48e0f..328747eb8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,6 @@ git: env: global: - VERSION="8.1" - - KIF_SCREENSHOTS="${TRAVIS_BUILD_DIR}/Screenshots" install: - cd submodules/build @@ -17,10 +16,4 @@ install: - ls -la script: - - export KIF_SCREENSHOTS=$TRAVIS_BUILD_DIR/Screenshots - - mkdir -p "$KIF_SCREENSHOTS" - - echo $KIF_SCREENSHOTS - xcodebuild -scheme linphone -project linphone.xcodeproj -sdk iphonesimulator8.1 test - -after_failure: - - ls -la $KIF_SCREENSHOTS From 1bb1c9bb1fbaeb07e3b3c006ae069891310785e7 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Thu, 5 Mar 2015 10:29:20 +0100 Subject: [PATCH 43/48] Allow to skip the tools check. This is useful for the download-sdk target. --- submodules/build/Makefile | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/submodules/build/Makefile b/submodules/build/Makefile index 37ce9eb82..eb6e89afa 100644 --- a/submodules/build/Makefile +++ b/submodules/build/Makefile @@ -26,13 +26,6 @@ enable_opus=yes enable_debug=no -# Checks -CHECK_MSG=$(shell ../../Tools/check_tools.sh) - -ifneq ($(CHECK_MSG),) - $(error Some tools are missing.) -endif - TUNNEL_AVAILABLE=$(shell git submodule status ../tunnel 2>/dev/null 1>/dev/null && echo yes) ifneq ($(TUNNEL_AVAILABLE),) @@ -43,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 := "" @@ -53,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) @@ -60,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) From 864edb4c648ebbcc3d2030ae2b375563f5fe0e6b Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Thu, 5 Mar 2015 10:31:25 +0100 Subject: [PATCH 44/48] Bypass tool check for travis CI --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 328747eb8..118719bd5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ git: env: global: - VERSION="8.1" + - BYPASS_TOOLCHECK=1 install: - cd submodules/build From d84e19cdbdf63f2d4f4dd4d4b7dc35f6e1e0b00c Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Thu, 5 Mar 2015 10:38:52 +0100 Subject: [PATCH 45/48] Checkout needed submodules for testing --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 118719bd5..0cc6d6898 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,8 @@ install: - cd submodules/build - make download-sdk - cd ../.. + - git submodule update --init Classes/KIF + - git submodule update --init --recursive submodules/linphone - ls -la script: From ff26b4fd18e88b11117192faec381d4f25c053fd Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Thu, 5 Mar 2015 10:50:43 +0100 Subject: [PATCH 46/48] Update build image status and fix typo --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 97e63cfff..e21aa1a96 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Linphone on iPhone -[![Build Status](https://travis-ci.org/BelledonneCommunications/linphone-iphone.svg?branch=kif)](https://travis-ci.org/BelledonneCommunications/linphone-iphone) +[![Build Status](https://travis-ci.org/BelledonneCommunications/linphone-iphone.svg?branch=master)](https://travis-ci.org/BelledonneCommunications/linphone-iphone) ## Build prerequisite @@ -37,7 +37,7 @@ Linphone for iPhone depends on liblinphone SDK. This SDK is generated from makef export PATH=$LOCAL_BIN_DIR:$PATH -* Install [gas-preprosessor.pl](http://github.com/yuvi/gas-preprocessor/) (version above July 2013) into your PATH. Suppose you use `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 From 2ae25cfbe6c1be7d1cb597cf68876320a44da4fa Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Thu, 5 Mar 2015 11:33:07 +0100 Subject: [PATCH 47/48] Add iconv to linphone tester --- linphone.xcodeproj/project.pbxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index cfd119eaf..5544044ec 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -686,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 */; }; @@ -1920,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 */, From 615ac0086e70eb0ee504087da330fcb8bef4de99 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Fri, 6 Mar 2015 11:14:04 +0100 Subject: [PATCH 48/48] Scroll to get to the Remove button --- KifTests/ContactsTester.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/KifTests/ContactsTester.m b/KifTests/ContactsTester.m index 8446da96b..5adc49d6c 100644 --- a/KifTests/ContactsTester.m +++ b/KifTests/ContactsTester.m @@ -120,6 +120,9 @@ // then remove the contact [tester tapViewWithAccessibilityLabel:@"Edit"]; + + [tester scrollViewWithAccessibilityIdentifier:@"Contact numbers table" byFractionOfSizeHorizontal:0 vertical:-0.9]; + [tester tapViewWithAccessibilityLabel:@"Remove"]; [tester waitForAbsenceOfViewWithAccessibilityLabel:fullName traits:UIAccessibilityTraitStaticText];