From a89524cefc7ae606f646df651d7567a825cb18b1 Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Tue, 28 Mar 2017 10:40:31 -0700 Subject: [PATCH 1/4] Update files for CD --- .travis.yml | 2 ++ fastlane/Fastfile | 57 +++++++++++++++++++++++----------- fastlane/Matchfile | 9 ++++++ fastlane/travis.sh | 6 +++- pass.xcodeproj/project.pbxproj | 9 ++++-- 5 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 fastlane/Matchfile diff --git a/.travis.yml b/.travis.yml index 4ba17fd..4911df3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,6 @@ language: objective-c osx_image: xcode8.2 +before_install: + - echo -e "machine github.com\n login $GITHUB_ACCESS_TOKEN" >> ~/.netrc script: - ./fastlane/travis.sh diff --git a/fastlane/Fastfile b/fastlane/Fastfile index d6bf447..b6af3f6 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -21,28 +21,58 @@ platform :ios do carthage(platform: "iOS") end + desc "Travis" + lane :travis do + test + beta + end + desc "Runs all the tests" lane :test do - scan(scheme: "pass") + scan( + scheme: "pass", + device: "iPhone 7" + ) end desc "Submit a new Beta Build to Apple TestFlight" desc "This will also make sure the profile is up to date" lane :beta do - # match(type: "appstore") # more information: https://codesigning.guide + create_keychain( + name: ENV["MATCH_KEYCHAIN_NAME"], + password: ENV["MATCH_KEYCHAIN_PASSWORD"], + default_keychain: true, + unlock: true, + timeout: 3600, + add_to_search_list: true + ) + match( + type: "appstore", + keychain_name: ENV["MATCH_KEYCHAIN_NAME"], + keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"], + readonly: true + ) ensure_git_status_clean increment_build_number( build_number: latest_testflight_build_number + 1, xcodeproj: "pass.xcodeproj" ) commit_version_bump(xcodeproj: "pass.xcodeproj") - push_to_git_remote - gym(scheme: "pass") # Build your app - more options available - testflight - # pilot(skip_waiting_for_build_processing: true) - - # sh "your_script.sh" - # You can also use other beta testing services here (run `fastlane actions`) + push_to_git_remote(local_branch: "develop") + gym(scheme: "pass") + pilot(skip_waiting_for_build_processing: true) + mailgun( + postmaster: ENV["MY_POSTMASTER"], + apikey: ENV["MY_API_KEY"], + to: ENV["DESTINATION_EMAIL"], + from: ENV["EMAIL_FROM_NAME"], + reply_to: ENV["EMAIL_REPLY_TO"], + subject: "A new build of Pass for iOS has been uploaded", + success: true, + app_link: "https://github.com/mssun/passforios", + ci_build_link: "https://travis-ci.org/mssun/passforios", + message: "A new build has been uploaded by Travis CI.", + ) end desc "Deploy a new version to the App Store" @@ -57,18 +87,9 @@ platform :ios do # You can define as many lanes as you want after_all do |lane| - # This block is called, only if the executed lane was successful - - # slack( - # message: "Successfully deployed new App Update." - # ) end error do |lane, exception| - # slack( - # message: exception.message, - # success: false - # ) end end diff --git a/fastlane/Matchfile b/fastlane/Matchfile new file mode 100644 index 0000000..7a59cec --- /dev/null +++ b/fastlane/Matchfile @@ -0,0 +1,9 @@ +git_url "https://github.com/mssun/certificates-passforios.git" + +type "development" # The default type, can be: appstore, adhoc, enterprise or development + +# app_identifier ["tools.fastlane.app", "tools.fastlane.app2"] +# username "user@fastlane.tools" # Your Apple Developer Portal username + +# For all available options run `fastlane match --help` +# Remove the # in the beginning of the line to enable the other options diff --git a/fastlane/travis.sh b/fastlane/travis.sh index 2804715..1f3e185 100755 --- a/fastlane/travis.sh +++ b/fastlane/travis.sh @@ -1,5 +1,9 @@ #!/bin/sh gem update fastlane -fastlane test +if [ "$TRAVIS_PULL_REQUEST" == "true" ]; then + fastlane test; +else + fastlane travis; +fi exit $? diff --git a/pass.xcodeproj/project.pbxproj b/pass.xcodeproj/project.pbxproj index ed2cae9..249ecec 100644 --- a/pass.xcodeproj/project.pbxproj +++ b/pass.xcodeproj/project.pbxproj @@ -379,7 +379,7 @@ DC917BD21E2E8231000FDF54 = { CreatedOnToolsVersion = 8.2.1; DevelopmentTeam = 4WDM8E95VU; - ProvisioningStyle = Automatic; + ProvisioningStyle = Manual; }; }; }; @@ -732,6 +732,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = me.mssun.passforios; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "893c10b3-79b1-46f7-914a-e625bf10d665"; + PROVISIONING_PROFILE_SPECIFIER = "match Development me.mssun.passforios"; SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/pass/Helpers/Objective-CBridgingHeader.h"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -744,7 +746,7 @@ baseConfigurationReference = AEAD6B31EAF5D061447A68CC /* Pods-pass.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CURRENT_PROJECT_VERSION = 2; DEFINES_MODULE = NO; DEVELOPMENT_TEAM = 4WDM8E95VU; @@ -764,6 +766,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = me.mssun.passforios; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "aefeea85-1194-4db2-9ce4-fb9995e2fdff"; + PROVISIONING_PROFILE_SPECIFIER = "match AppStore me.mssun.passforios"; SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/pass/Helpers/Objective-CBridgingHeader.h"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -781,6 +785,7 @@ DC13B1561E8640810097803F /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; DC917BCE1E2E8231000FDF54 /* Build configuration list for PBXProject "pass" */ = { isa = XCConfigurationList; From 820c4eca043e875f3e2587c41200666d3306d484 Mon Sep 17 00:00:00 2001 From: Yishi Lin Date: Thu, 30 Mar 2017 01:16:23 +0800 Subject: [PATCH 2/4] Add some icons --- .../Camera.imageset/Contents.json | 22 ++++++++++++++++++ .../Camera.imageset/Screenshot-100.png | Bin 0 -> 1764 bytes .../Camera.imageset/Screenshot-50.png | Bin 0 -> 841 bytes .../Copy.imageset/Contents.json | 22 ++++++++++++++++++ .../Copy.imageset/Copy-100.png | Bin 0 -> 853 bytes .../Assets.xcassets/Copy.imageset/Copy-50.png | Bin 0 -> 420 bytes .../HorizontalSettings.imageset/Contents.json | 22 ++++++++++++++++++ .../Horizontal Settings Mixer-50.png | Bin 0 -> 444 bytes .../Horizontal Settings Mixer-75.png | Bin 0 -> 946 bytes .../Refresh.imageset/Contents.json | 22 ++++++++++++++++++ .../Refresh.imageset/Refresh-64.png | Bin 0 -> 939 bytes .../Refresh.imageset/Refresh-75.png | Bin 0 -> 1112 bytes 12 files changed, 88 insertions(+) create mode 100644 pass/Assets.xcassets/Camera.imageset/Contents.json create mode 100644 pass/Assets.xcassets/Camera.imageset/Screenshot-100.png create mode 100644 pass/Assets.xcassets/Camera.imageset/Screenshot-50.png create mode 100644 pass/Assets.xcassets/Copy.imageset/Contents.json create mode 100644 pass/Assets.xcassets/Copy.imageset/Copy-100.png create mode 100644 pass/Assets.xcassets/Copy.imageset/Copy-50.png create mode 100644 pass/Assets.xcassets/HorizontalSettings.imageset/Contents.json create mode 100644 pass/Assets.xcassets/HorizontalSettings.imageset/Horizontal Settings Mixer-50.png create mode 100644 pass/Assets.xcassets/HorizontalSettings.imageset/Horizontal Settings Mixer-75.png create mode 100644 pass/Assets.xcassets/Refresh.imageset/Contents.json create mode 100644 pass/Assets.xcassets/Refresh.imageset/Refresh-64.png create mode 100644 pass/Assets.xcassets/Refresh.imageset/Refresh-75.png diff --git a/pass/Assets.xcassets/Camera.imageset/Contents.json b/pass/Assets.xcassets/Camera.imageset/Contents.json new file mode 100644 index 0000000..3f581ce --- /dev/null +++ b/pass/Assets.xcassets/Camera.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Screenshot-50.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Screenshot-100.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/pass/Assets.xcassets/Camera.imageset/Screenshot-100.png b/pass/Assets.xcassets/Camera.imageset/Screenshot-100.png new file mode 100644 index 0000000000000000000000000000000000000000..8375cf648f571f59d48bea6ebc0328769d32f880 GIT binary patch literal 1764 zcmVg^CvTt>=VfriUUtVQIo_-0upQyBp?Y$Fb)JGCnY2S3C4k7$hRW$(IT#VEF#}68vA0{D1fX4 zqc9`{C=mcbJ^d75b^aqFuZswOm$e9h{2?N*DGvNABJV%wcTdKADk5K*0e%pX4?G7w z>U%XHUx>)(hRC->40pz_0oetqVUTvkSsHx78^F#`HP=!D4b-V`%h83fy z4em%Hbzcz4cq<#K>eUGZFwSRNc4`X{fS9Gr@u~oQiOyC4%yz$#N}>c8tp>=~58;am zi$$;-NX9I$>S#_x3Yh;(M=uWg96$i(+$GU`YLU~JW85glfQ^I$7@N@xdr!uNRShi5BL$oE)4tE6Q(Agov`CAC%DBOT<| zFQT8SLu>%Hpw|u{scc$t25PMu1|KPo8-2L|!b*feIw!5i2Mid}lIz&2&B9B9X}v&L zK0pWkXz#DQ1JFg?PQcYwq{disIG8;*mN=8l-^7pF>>VRNQGDIZHvxOfYemQOjT8L ziERbGH$9;M*-T-MT=t!P;dSZF<2kL`*-z{1p#ZVOc(2A5Ce@_&mI(FHm|+01#vC`- z`#j+hbIRwqy?SrrxlqCYVt3`gq zkv7VR^pQ5cr;oJl9gU-|_k}vr)*2`3eGl);o^|i-WAFWPrhbMuwMEC>NQj;QY6dm7 zb!4s=B!EEet&$2&?_B~?CV(MEz0_`GYXRlj1EVc{U;EBo1EMDlIOV}USm`0{s;}0# z)jPYE;YZ(lVE{Rr=)HWNfCNJ-0l7CoY-b{`ySv{8<jqf}aDd z-H5k))i^!Ryo~>FCNKC4hnMk}`6np;E1??pKl(uzfSK_lC;roqGXge){7f~#*>ZZR zT$P6&92Iqq!=5>mu+Jzzd9)j8ZUJNt$vMi20|`j5g^++GAi+2gjGUB^1SA*-f{~LF zl7Ix`KrnJrLK2W*90*2EN=O0{j03^QNeM|nf^i@iIsXH2!Kid#k#jBp00002)Df|0JDB`c~L)sd)=VP9*`P z#y(2AtQnvd$Qw!5fr&%M&cfokq&rD(!>{NmUpZwvo^pK-oZ2lALlaK%jcI`@cezhXo#tcRVN#0TAOIs^bNd z4TQ-6V^N#KKG*HY0KuW-_fKGC5vW%9A94>P?<&)iA|U@e(=ii(V1c>2OJ4v3#>-4I zAm)0dAZ&ADFdj8*0wi{+d31Hkv1JvW47dpp&JFny2fHN6OyRZ6qVy`z1PJkfcu_ie z3W#mWJl!Z@wh0h|BXUZNF^Mf$!?UK0!+4BiF)L@RCO{U0R0ybfUfJjTYN&LDAXUQQqH*Us=fiV|@844JEc^4@SwE!0Haj8LobeZ8lK)Aagr}4!Kxke-` zH}huAg8?xxTyuH)s)n$@#fm5Q{*qF~rmoeU0N*F^J_DMCQsXaJVkYx zZ^}<>Q?}!8Tlz+%`GrDs+Ix{M$0UW@8Z1W@3I%{ft-?!=53Sg_ZOwRvz zpZ@Invvx=93!q5DlDAU=yK`7~f_Y6#7W70dVJeE%sJi|8WQ)jzyeYg--dt;tigT+y zHG54@r_7VfMS|_~gI6^zx!3oiC9wR&*N09(<5w+kadbK!UOItG!&brQl%U6H$(xm2 zGJN$fpYt7Js&Z7B66xUfZVJzYv?((k+!m%Znk)=qbF?q7_&BljcY%L=Z77KMf?`g!27<%c?Kh?qYCxnAO1Zpe=&FcHpwT`A9KEaAAM$%^R7JiCCjJX z{*cFhj?L)Tk5fy3yfw2uk)`3?u%=}b&j~FJ@5VI^n`BPB(eQ3M)3ZtE#2O9n<})3e zY)<58{AWs0o093!aa-j2ywv^QLx0AJac=r5_cgWe@2)-0a(C`6*KctD%bPSI@cO;K zkJIX^Rf=6x%RQbc^;b!@_(ibosVGV0K~fboFyt=akR{01dr~F#rGn literal 0 HcmV?d00001 diff --git a/pass/Assets.xcassets/Copy.imageset/Copy-50.png b/pass/Assets.xcassets/Copy.imageset/Copy-50.png new file mode 100644 index 0000000000000000000000000000000000000000..fe26bc25e7b12c131e544367ecc098f71738acae GIT binary patch literal 420 zcmV;V0bBlwP)#yS;9+Kz&01>)&D9)=mlv*Dab`4FDIxyKv8*{Y0Z!`2`t08cB-mO;|lj#d~o z$PK_9fT!=jJxws44NF0mU>?Slv)XeNCV{9T)0{9Xkfp#_gi(Uf*h@7{p_< zs_d@-NlRv7)F4#$SAxvKs6nXgUjbqA;-vBHy#sxMap{Nx4=a#Y-s! z$gKt;T7vX~=>pONrW;6Wn64l#VVZz2cR9VAU6=(+ajm}W?72LzMNLwR1yDS@0)(CV zQhg{gGaYGav1)}Pp$O|4V|`dFtYx$cTNc&|Yq6d&)`zviT1Km|WnrzYTg&|)jp{qQ z*IK&)VFxj(--;puk|z*~IK7~JjtocHr6SHDS1nikWI9o#>LkuZGLRp14#M^QDCr*n O0000r005<6eY`_S>1TX>{K_@6o02{#RF1agdlSB4%Wqi)hTq^6+lkB{7 zMI+a$5e{-do`4N-F%;t+cmWGoR{fWX38QB->c20Q!tfD;YiP zGJ_TkA~R^wAToni1Bhhf=pd3Z3WIb-gvFGE@+u-RL6XcTK|CNb6BG?1GeOZHvKPD# zvQUBj8QJ~uD|)I4Dj~#CV`cxwjvu6#7Oe>+$yoInDbZ6o#!6;_N`QF|M41VS29cSd m8bC_qAc^T|Ey;qVg8Tp|)MhiZjpmd90000002t}1^@s6I8J)%000AdNkl6Srn4B47zduokS_0GL}0A8Dr(y**m{RD6i09~&ax+JaXM)!xNtgAGv z=UuEK3&tgWPsO9NNlOb@Lbn903|NdQkA&w_RmLcOR5xUru|;`jV{U3$znmkPr(sIW z`s?|@3OXE|IAZ^o6c%sxBUNtQjsX@&^g~je!eYkF;eV;n1@A6!!=X`gX&p*F_rcCI zBESo116IHi2nedBEsHVhV^=;03r=U!=??GrL37vB9ZsML=bEF#{&diGJCPf(}4}$Zzc1&)-8+Et2Z-ia9opmTw;H+by(c__AFMu?SKhRcU84zSaiKFrb(AJ z7dn@;n=f~AU9x3ZPXWB_U=h^WfZ5QZdSG-#eqSst!}9EGdvx6J0+t)q)vYk$(dw!m ztMTZ#8K9 z13X*7^(9Iym(0V`k$1O(NvtbipD z5LCmmD!}5|8+&f2uL56#6Z1uOy9KOY^) UO!j@5-~a#s07*qoM6N<$g66onQvd(} literal 0 HcmV?d00001 diff --git a/pass/Assets.xcassets/Refresh.imageset/Contents.json b/pass/Assets.xcassets/Refresh.imageset/Contents.json new file mode 100644 index 0000000..5932896 --- /dev/null +++ b/pass/Assets.xcassets/Refresh.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Refresh-64.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Refresh-75.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/pass/Assets.xcassets/Refresh.imageset/Refresh-64.png b/pass/Assets.xcassets/Refresh.imageset/Refresh-64.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce94efbdca6847100e77f8701d3d18fafabcf0e GIT binary patch literal 939 zcmV;c162HpP)7G*^Kl!`2?~?vV z`XcFC(r5Skq9R?A0Kh$v^gIAv3I<&<&z=; zB|!4(1mwVTeDNJC)Y4D{KsiohgM@e?O!>{^ln9uU{iVy+ErG{lkpy2D0+_IwoT6Yz z@@Hbtdnp>`R_&5gUpTM{o5?AfF4>+e9om}UecU+`OxR3L0aAcNKxk{oJ|`KHEbksE zGhs711*89tr2o~u-&bpTVt_ciTVt89nVek2SaKY7B*W74-3q|_?S=pnA4ie5SMIDY z1yt(43j)ae96zXlml0MUGFqSYDROo}KsYf-z<4RS@m7)pZamnNkBTmlJ5WObJ+H0> z+faaorJj9;0(xFu3$~#E3rjuw3vlLLV=BgUql8Au{F61Ov>6d}(l~KK13YZRsn*|$`HA8V?A$NR89A5_z#p;ok1FmP0RoQ N002ovPDHLkV1f#gt9t+d literal 0 HcmV?d00001 diff --git a/pass/Assets.xcassets/Refresh.imageset/Refresh-75.png b/pass/Assets.xcassets/Refresh.imageset/Refresh-75.png new file mode 100644 index 0000000000000000000000000000000000000000..7a710ba13670d9a9a0c908953d434b1f37e1f2a4 GIT binary patch literal 1112 zcmeAS@N?(olHy`uVBq!ia0vp^-XP4u1|%)~s$MZLu*iG5IEGZjy`A0Id)0uatycH| z+XhAh6u5!Whrx#-he4P@xM5$ga%kYCU+=vyElT(HFJJyS`>y`}xm!y0bk6ubIP_Ms zPizB=Aj_HtRRMt*=SW6x1%(}Lo0z6KI2716ZCW?`rm6An%(QUrjrC@m=cj#h-m&f3 zy6OW==WLC48`owvWQqSic&6cdp~;?!8yLQvIP=b2rf9)l4yFeiHZ**> zQut9MH|XW}>6tp*PWqEa8L}TT}(+rNc zrcasHV95PG?!k12+L_b1-o5F1aoy+UFbN$p*#>*C&MwdF+ zSvSXgyb%y_MI&v+of-QipYH7`u5RFMcI{2*oFE-+W}1@!nL(PV+m!$1^z${qIU{}tIV&(P|tE1eH( zt?arzeV)I_v?IkC5m!{wcKv*mryt7r@xq2n8jF{FQQ+U&8?kV@NLbWk&D5T1xAHf( z^V2mQ|BLTq^p;rGAi9BtsVQ4SJAsph<$6Ha0U-{KbqldYD{m^RPGiFZsZ(4Lu1qUs zyY%Gl<)3=%w`xgbFW zi*to5+Gp_2_q|(Q&AgcTgQsH0*^gU&4p+vocm-5T=ARA>&6|BmUv`Q38r$GaQ>u`K48MZb@vka_xD?n(^`vP?F2<_N}bi7n#*3*x1&s z511X{J=ILdgz;*YnUAjf8G}2=u59b5D9hV<;>?_kTBe}2wv+D}nsLurvSONP_PzN> zPcW^yvSa=^&MhUzyPqm$lrPGit+eloOLDm2hqZFs9#2Poi_Inp3wGIDeZi?6d->M6wPFhb zlqc+Z_bMPUaPp@lFRscw*-LT-Lze@OKQsdOHtN# zTuDI+XBnPIF4>yA>;HcCH8wl8?A`t?M>CiCo7RomkE Date: Thu, 30 Mar 2017 01:17:22 +0800 Subject: [PATCH 3/4] Update fill password UI - Click the setting icon to show or hide the slider. - Clicking on other sections does not work now (remove gesture) --- .../PasswordEditorTableViewController.swift | 38 ++------------- pass/Views/FillPasswordTableViewCell.swift | 12 +++++ pass/Views/FillPasswordTableViewCell.xib | 48 +++++++++++++------ pass/Views/SliderTableViewCell.xib | 4 +- 4 files changed, 50 insertions(+), 52 deletions(-) diff --git a/pass/Controllers/PasswordEditorTableViewController.swift b/pass/Controllers/PasswordEditorTableViewController.swift index cdef75f..afa1773 100644 --- a/pass/Controllers/PasswordEditorTableViewController.swift +++ b/pass/Controllers/PasswordEditorTableViewController.swift @@ -56,11 +56,6 @@ class PasswordEditorTableViewController: UITableViewController, FillPasswordTabl tableView.estimatedRowHeight = 48 self.tableView.sectionFooterHeight = UITableViewAutomaticDimension; self.tableView.estimatedSectionFooterHeight = 0; - - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tableTapped)) - tapGesture.delegate = self - tapGesture.cancelsTouchesInView = false - tableView.addGestureRecognizer(tapGesture) } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { @@ -166,35 +161,8 @@ class PasswordEditorTableViewController: UITableViewController, FillPasswordTabl fillPasswordCell?.setContent(content: plainPassword) } - func tableTapped(recognizer: UITapGestureRecognizer) { - if recognizer.state == UIGestureRecognizerState.ended { - let tapLocation = recognizer.location(in: self.tableView) - let tapIndexPath = self.tableView.indexPathForRow(at: tapLocation) - - // do nothing, if delete is tapped (a temporary solution) - if tapIndexPath != nil, deletePasswordCell != nil, - tableView.cellForRow(at: tapIndexPath!) == deletePasswordCell { - return - } - - // hide password settings (e.g., the length slider) - if tapIndexPath?.section != passwordSection, hidePasswordSettings == false { - hidePasswordSettings = true - tableView.reloadSections([passwordSection], with: .fade) - // select the row at tapIndexPath manually - if tapIndexPath != nil { - self.tableView(self.tableView, didSelectRowAt: tapIndexPath!) - } - } - } - } - - func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { - if gestureRecognizer is UITapGestureRecognizer { - // so that the tap gesture could be passed by - return true - } else { - return false - } + func showHidePasswordSettings() { + hidePasswordSettings = !hidePasswordSettings + tableView.reloadSections([passwordSection], with: .fade) } } diff --git a/pass/Views/FillPasswordTableViewCell.swift b/pass/Views/FillPasswordTableViewCell.swift index e97edde..9861cae 100644 --- a/pass/Views/FillPasswordTableViewCell.swift +++ b/pass/Views/FillPasswordTableViewCell.swift @@ -10,6 +10,7 @@ import UIKit protocol FillPasswordTableViewCellDelegate { func generateAndCopyPassword() + func showHidePasswordSettings() } class FillPasswordTableViewCell: ContentTableViewCell { @@ -17,10 +18,17 @@ class FillPasswordTableViewCell: ContentTableViewCell { @IBOutlet weak var contentTextField: UITextField! var delegate: FillPasswordTableViewCellDelegate? + @IBOutlet weak var settingButton: UIButton! + @IBOutlet weak var generateButton: UIButton! + override func awakeFromNib() { super.awakeFromNib() // Initialization code contentTextField.font = UIFont(name: Globals.passwordFonts, size: (contentTextField.font?.pointSize)!) + + // Force aspect ratio of button images + settingButton.imageView?.contentMode = .scaleAspectFit + generateButton.imageView?.contentMode = .scaleAspectFit } override func setSelected(_ selected: Bool, animated: Bool) { @@ -33,6 +41,10 @@ class FillPasswordTableViewCell: ContentTableViewCell { self.delegate?.generateAndCopyPassword() } + @IBAction func showHidePasswordSettings() { + self.delegate?.showHidePasswordSettings() + } + // re-color @IBAction func textFieldDidChange(_ sender: UITextField) { contentTextField.attributedText = Utils.attributedPassword(plainPassword: sender.text ?? "") diff --git a/pass/Views/FillPasswordTableViewCell.xib b/pass/Views/FillPasswordTableViewCell.xib index c27362f..228c84a 100644 --- a/pass/Views/FillPasswordTableViewCell.xib +++ b/pass/Views/FillPasswordTableViewCell.xib @@ -16,13 +16,13 @@ - + - - + + - + @@ -31,31 +31,49 @@ - + - - - - - - - + + + + + + + + + + + + + + + diff --git a/pass/Views/SliderTableViewCell.xib b/pass/Views/SliderTableViewCell.xib index 09698e8..11e5b85 100644 --- a/pass/Views/SliderTableViewCell.xib +++ b/pass/Views/SliderTableViewCell.xib @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ -