Skip to content

Commit ee4965f

Browse files
committed
Updated the fix.
1 parent f9405e6 commit ee4965f

File tree

5 files changed

+124
-54
lines changed

5 files changed

+124
-54
lines changed

Examples/SampleSwift/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ target 'SampleSwift' do
66
use_frameworks!
77

88
pod 'SwiftLoggly’
9-
pod 'SwiftCSVExport'
9+
pod 'SwiftCSVExport', :git => 'https://github.com/vigneshuvi/SwiftCSVExport.git', :tag => '1.0.4'
1010
1111
# Pods for SampleSwift
1212

Examples/SampleSwift/SampleSwift.xcodeproj/project.pbxproj

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -237,26 +237,26 @@
237237
isa = PBXProject;
238238
attributes = {
239239
LastSwiftUpdateCheck = 0810;
240-
LastUpgradeCheck = 0810;
240+
LastUpgradeCheck = 0900;
241241
ORGANIZATIONNAME = vigneshuvi;
242242
TargetAttributes = {
243243
0B3B6C4B1E3F7105003AE9C4 = {
244244
CreatedOnToolsVersion = 8.1;
245245
DevelopmentTeam = 7FUQA46NH7;
246-
LastSwiftMigration = 0810;
246+
LastSwiftMigration = 0900;
247247
ProvisioningStyle = Automatic;
248248
};
249249
0B3B6C5F1E3F7105003AE9C4 = {
250250
CreatedOnToolsVersion = 8.1;
251251
DevelopmentTeam = 7FUQA46NH7;
252-
LastSwiftMigration = 0810;
252+
LastSwiftMigration = 0900;
253253
ProvisioningStyle = Automatic;
254254
TestTargetID = 0B3B6C4B1E3F7105003AE9C4;
255255
};
256256
0B3B6C6A1E3F7105003AE9C4 = {
257257
CreatedOnToolsVersion = 8.1;
258258
DevelopmentTeam = 7FUQA46NH7;
259-
LastSwiftMigration = 0810;
259+
LastSwiftMigration = 0900;
260260
ProvisioningStyle = Automatic;
261261
TestTargetID = 0B3B6C4B1E3F7105003AE9C4;
262262
};
@@ -517,15 +517,22 @@
517517
CLANG_CXX_LIBRARY = "libc++";
518518
CLANG_ENABLE_MODULES = YES;
519519
CLANG_ENABLE_OBJC_ARC = YES;
520+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
520521
CLANG_WARN_BOOL_CONVERSION = YES;
522+
CLANG_WARN_COMMA = YES;
521523
CLANG_WARN_CONSTANT_CONVERSION = YES;
522524
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
523525
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
524526
CLANG_WARN_EMPTY_BODY = YES;
525527
CLANG_WARN_ENUM_CONVERSION = YES;
526528
CLANG_WARN_INFINITE_RECURSION = YES;
527529
CLANG_WARN_INT_CONVERSION = YES;
530+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
531+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
528532
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
533+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
534+
CLANG_WARN_STRICT_PROTOTYPES = YES;
535+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
529536
CLANG_WARN_SUSPICIOUS_MOVES = YES;
530537
CLANG_WARN_UNREACHABLE_CODE = YES;
531538
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -567,15 +574,22 @@
567574
CLANG_CXX_LIBRARY = "libc++";
568575
CLANG_ENABLE_MODULES = YES;
569576
CLANG_ENABLE_OBJC_ARC = YES;
577+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
570578
CLANG_WARN_BOOL_CONVERSION = YES;
579+
CLANG_WARN_COMMA = YES;
571580
CLANG_WARN_CONSTANT_CONVERSION = YES;
572581
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
573582
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
574583
CLANG_WARN_EMPTY_BODY = YES;
575584
CLANG_WARN_ENUM_CONVERSION = YES;
576585
CLANG_WARN_INFINITE_RECURSION = YES;
577586
CLANG_WARN_INT_CONVERSION = YES;
587+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
588+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
578589
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
590+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
591+
CLANG_WARN_STRICT_PROTOTYPES = YES;
592+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
579593
CLANG_WARN_SUSPICIOUS_MOVES = YES;
580594
CLANG_WARN_UNREACHABLE_CODE = YES;
581595
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -611,7 +625,8 @@
611625
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
612626
PRODUCT_BUNDLE_IDENTIFIER = com.vigneshuvi.SampleSwift;
613627
PRODUCT_NAME = "$(TARGET_NAME)";
614-
SWIFT_VERSION = 3.0;
628+
SWIFT_SWIFT3_OBJC_INFERENCE = On;
629+
SWIFT_VERSION = 4.0;
615630
};
616631
name = Debug;
617632
};
@@ -625,7 +640,8 @@
625640
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
626641
PRODUCT_BUNDLE_IDENTIFIER = com.vigneshuvi.SampleSwift;
627642
PRODUCT_NAME = "$(TARGET_NAME)";
628-
SWIFT_VERSION = 3.0;
643+
SWIFT_SWIFT3_OBJC_INFERENCE = On;
644+
SWIFT_VERSION = 4.0;
629645
};
630646
name = Release;
631647
};
@@ -640,7 +656,8 @@
640656
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
641657
PRODUCT_BUNDLE_IDENTIFIER = com.vigneshuvi.SampleSwiftTests;
642658
PRODUCT_NAME = "$(TARGET_NAME)";
643-
SWIFT_VERSION = 3.0;
659+
SWIFT_SWIFT3_OBJC_INFERENCE = On;
660+
SWIFT_VERSION = 4.0;
644661
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SampleSwift.app/SampleSwift";
645662
};
646663
name = Debug;
@@ -656,7 +673,8 @@
656673
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
657674
PRODUCT_BUNDLE_IDENTIFIER = com.vigneshuvi.SampleSwiftTests;
658675
PRODUCT_NAME = "$(TARGET_NAME)";
659-
SWIFT_VERSION = 3.0;
676+
SWIFT_SWIFT3_OBJC_INFERENCE = On;
677+
SWIFT_VERSION = 4.0;
660678
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SampleSwift.app/SampleSwift";
661679
};
662680
name = Release;
@@ -671,7 +689,8 @@
671689
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
672690
PRODUCT_BUNDLE_IDENTIFIER = com.vigneshuvi.SampleSwiftUITests;
673691
PRODUCT_NAME = "$(TARGET_NAME)";
674-
SWIFT_VERSION = 3.0;
692+
SWIFT_SWIFT3_OBJC_INFERENCE = On;
693+
SWIFT_VERSION = 4.0;
675694
TEST_TARGET_NAME = SampleSwift;
676695
};
677696
name = Debug;
@@ -686,7 +705,8 @@
686705
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
687706
PRODUCT_BUNDLE_IDENTIFIER = com.vigneshuvi.SampleSwiftUITests;
688707
PRODUCT_NAME = "$(TARGET_NAME)";
689-
SWIFT_VERSION = 3.0;
708+
SWIFT_SWIFT3_OBJC_INFERENCE = On;
709+
SWIFT_VERSION = 4.0;
690710
TEST_TARGET_NAME = SampleSwift;
691711
};
692712
name = Release;

Examples/SampleSwift/SampleSwift/ViewController.swift

Lines changed: 57 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,59 +10,84 @@ import UIKit
1010
import SwiftLoggly
1111
import SwiftCSVExport
1212

13-
class ViewController: UIViewController {
13+
import UIKit
14+
import SwiftLoggly
15+
import SwiftCSVExport
16+
1417

18+
19+
class ViewController: UIViewController {
20+
21+
var task: String = ""
22+
23+
var tasks: String = ""
24+
25+
26+
var DMID: String = "123456789"
27+
var RECORDID: String = "PCA12345D"
28+
var First : String = "Leah"
29+
var Last : String = "Schmidt"
30+
var Company: String = "Lab Cab Inc"
31+
var Address1 : String = " 5442 Appaloosa Way"
32+
var Address2 : String = "First Floor"
33+
var City : String = "Loma Linda"
34+
var State : String = "Missouri"
35+
var Postalcode : String = "64804"
36+
var Country: String = "USA"
37+
var Sender:String = "Annie"
38+
var Frontimage : String = "Picture of Roo"
39+
var Backtext : String = "\nHi Leah\n Here is a photo of ROO\n Love\n Leah\n"
40+
var Accentimage : String = " NO Accentimage"
41+
var Backimage : String = "NO Backimage"
42+
1543
@IBOutlet var webview: UIWebView!
1644
override func viewDidLoad() {
1745
super.viewDidLoad()
18-
// Do any additional setup after loading the view, typically from a nib.
1946

20-
webview.loadRequest(NSURLRequest(url: NSURL(string: "https://github.com/vigneshuvi/SwiftCSVExport/blob/master/README.md")! as URL) as URLRequest)
21-
22-
// First User Object
23-
let user1:NSMutableDictionary = NSMutableDictionary()
24-
user1.setObject("vignesh", forKey: "name" as NSCopying);
25-
user1.setObject("[email protected]", forKey: "email" as NSCopying);
2647

27-
// Secound User Object
28-
let user2:NSMutableDictionary = NSMutableDictionary()
29-
user2.setObject("vinoth", forKey: "name" as NSCopying);
30-
user2.setObject("[email protected]", forKey: "email" as NSCopying);
48+
// First User Object
49+
let user1:NSMutableDictionary = NSMutableDictionary()
3150

32-
// CSV fields Array
33-
let fields:NSMutableArray = NSMutableArray()
34-
fields.add("name");
35-
fields.add("email");
51+
user1.setObject(DMID, forKey: "DMID" as NSCopying); //required
52+
user1.setObject(RECORDID, forKey: "RecordID" as NSCopying); //required
53+
user1.setObject(First, forKey: "First" as NSCopying); //required
54+
user1.setObject(Last, forKey: "Last" as NSCopying); //required
55+
user1.setObject(Company, forKey: "Company" as NSCopying); //required
56+
user1.setObject(Address1, forKey: "Address1" as NSCopying); //required
57+
user1.setObject(Address2, forKey: "Address2" as NSCopying); //optional
58+
user1.setObject(City, forKey: "City" as NSCopying); //required
59+
user1.setObject(State, forKey: "State" as NSCopying); //required
60+
user1.setObject(Postalcode, forKey: "Postalcode" as NSCopying); //required
61+
user1.setObject(Country, forKey: "Country" as NSCopying); //optional
62+
user1.setObject(Sender, forKey: "Sender" as NSCopying); //optional
63+
user1.setObject(Frontimage, forKey: "Frontimage" as NSCopying); //required
64+
user1.setObject(Backtext, forKey: "Backtext" as NSCopying); //optional
65+
user1.setObject(Accentimage, forKey: "Accentimage" as NSCopying); //optional
66+
user1.setObject(Backimage, forKey: "Backimage" as NSCopying); //optional
3667

68+
3769
// CSV rows Array
3870
let data:NSMutableArray = NSMutableArray()
3971
data.add(user1);
40-
data.add(user2);
41-
42-
let userpath:String = SwiftCSVExport.exportCSV("userlist1",fields: fields, values: data);
43-
print(userpath)
72+
4473

45-
let namepath:String = SwiftCSVExport.exportCSV("userlist1",fields: ["name", "email"], values: data);
46-
print(namepath)
74+
let filePath:String = SwiftCSVExport.exportCSV("userlist1",fields: ["DMID", "RecordID", "First", "Last", "Company","Address1", "Address2", "City", "State", "Postalcode", "Country", "Sender","Frontimage", "Backtext", "Accentimage", "Backimage"],values: data);
4775

48-
// Able to convert JSON string into CSV.
49-
let string = "[{\"name\":\"vignesh\",\"email\":\"[email protected]\"},{\"name\":\"vinoth\",\"email\":\"[email protected]\"}]";
50-
let filePath:String = exportCSV("userlist", fields:["name","email"], values:string);
5176
print(filePath)
52-
77+
//
5378
let fileDetails = readCSV(filePath);
5479
if fileDetails.allKeys.count > 0 {
5580
loggly(LogType.Info, dictionary: fileDetails)
5681
}
57-
58-
82+
83+
5984
}
60-
85+
6186
override func didReceiveMemoryWarning() {
6287
super.didReceiveMemoryWarning()
6388
// Dispose of any resources that can be recreated.
6489
}
65-
66-
90+
var csvText = "DMID, RecordID, First, Last, Street,Apt., City, State, Postalcode\n"
91+
92+
6793
}
68-

SwiftCSVExport.xcodeproj/project.pbxproj

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@
259259
TargetAttributes = {
260260
0B54EBCE1E4987A00043976B = {
261261
CreatedOnToolsVersion = 8.1;
262-
LastSwiftMigration = 0830;
262+
LastSwiftMigration = 0900;
263263
ProvisioningStyle = Manual;
264264
};
265265
0B54EBD71E4987A00043976B = {
@@ -514,7 +514,8 @@
514514
PRODUCT_NAME = "$(TARGET_NAME)";
515515
SKIP_INSTALL = YES;
516516
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
517-
SWIFT_VERSION = 3.0;
517+
SWIFT_SWIFT3_OBJC_INFERENCE = On;
518+
SWIFT_VERSION = 4.0;
518519
};
519520
name = Debug;
520521
};
@@ -537,7 +538,8 @@
537538
PRODUCT_BUNDLE_IDENTIFIER = vigneshuvi.SwiftCSVExport;
538539
PRODUCT_NAME = "$(TARGET_NAME)";
539540
SKIP_INSTALL = YES;
540-
SWIFT_VERSION = 3.0;
541+
SWIFT_SWIFT3_OBJC_INFERENCE = On;
542+
SWIFT_VERSION = 4.0;
541543
};
542544
name = Release;
543545
};

SwiftCSVExport/Sources/CSVExport.swift

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ extension String {
1313
var length: Int {
1414
return self.characters.count
1515
}
16+
17+
func stringByAppendingPathComponent(path: String) -> String {
18+
let nsSt = self as NSString
19+
return nsSt.appendingPathComponent(path)
20+
}
1621
}
1722

1823
//MARK: - CSVExport Class
@@ -67,8 +72,25 @@ extension String {
6772
let result:String = fields.componentsJoined(by: ",");
6873
CSVExport.export.write( text: result)
6974
for dict in values {
70-
let values = (dict as! NSDictionary).allValues as NSArray;
71-
let result:String = values.componentsJoined(by: ",");
75+
let dictionary = (dict as! NSDictionary);
76+
var result = ""
77+
for key in fields {
78+
if let value = dictionary.object(forKey: key) {
79+
if result.characters.count == 0 {
80+
result = "\(value)"
81+
} else {
82+
result = "\(result),\(value)"
83+
}
84+
85+
} else {
86+
if result.characters.count == 0 {
87+
result = "\("")"
88+
} else {
89+
result = "\(result),\("")"
90+
}
91+
92+
}
93+
}
7294
CSVExport.export.write( text: result)
7395
}
7496
return CSVExport.export.getFilePath();
@@ -95,20 +117,23 @@ extension String {
95117
}
96118
return "";
97119
}
98-
120+
99121

100122
///write content to the current csv file.
101123
open func write(text: String) {
102124
let path = "\(directory)/\(self.csvFileName())"
103125
let fileManager = FileManager.default
126+
let updatedString = text.replacingOccurrences(of: "\n", with: "0x0a").replacingOccurrences(of: "\t", with: "0x09").replacingOccurrences(of: "\r", with: "0x0d")
127+
128+
104129
if !fileManager.fileExists(atPath: path) {
105130
do {
106131
try "".write(toFile: path, atomically: true, encoding: encodingType)
107132
} catch _ {
108133
}
109134
}
110135
if let fileHandle = FileHandle(forWritingAtPath: path) {
111-
let writeText = "\(text)\n"
136+
let writeText = "\(updatedString)\n"
112137
fileHandle.seekToEndOfFile()
113138
fileHandle.write(writeText.data(using: encodingType)!)
114139
fileHandle.closeFile()
@@ -192,7 +217,7 @@ extension String {
192217
}
193218
catch {
194219
/* error handling here */
195-
print("Error while read csv: \(error)", terminator: "")
220+
print("Error while read csv: \(error)", terminator: "")
196221
}
197222
}
198223
return output;
@@ -285,7 +310,7 @@ public func exportCSV(_ filename:String, fields: [String], values: [[String:Any]
285310

286311
///a free function to make export the CSV file from file name, fields and values
287312
public func exportCSV(_ filename:String, fields: [String], values: String) -> String{
288-
return CSVExport.export.exportCSVString(filename, fields: (fields as NSArray) as! [String], values: values);
313+
return CSVExport.export.exportCSVString(filename, fields: (fields as NSArray) as! [String], values: values);
289314
}
290315

291316
///a free function to make read the CSV file
@@ -297,5 +322,3 @@ public func readCSV(_ filePath:String) -> NSMutableDictionary{
297322
public func readCSVFromDefaultPath(_ fileName:String) -> NSMutableDictionary{
298323
return CSVExport.export.readCSVFromDefaultPath(fileName);
299324
}
300-
301-

0 commit comments

Comments
 (0)